我们使用 Spring Boot 官方的 spring-boot-starter-logging 作为日志依赖,在 pom.xml 文件中加入依赖就可以开箱即用:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> </dependency> 复制代码
当我们在开发的时候,难免需要在控制台自定义输出一些东西来追踪,可以通过在类上添加 @Slf4j 注解,然后在方法内部就可以使用注入的 log 变量输出调试:
log.warn("xfly demo........."); 复制代码
注意默认是只有 ERROR、WARN、INFO 三种级别的日志会输出到控制台,在开发的时候可以把级别设置为 DEBUG,在 application-dev.yml 文件中设置 logging.level 为 debug 即可
自己在控制台输出的调试格式倒无所谓,但是我们往往需要把日志记录到文件中,尤其是线上环境,对于排错分析都非常有用,日志这块也有非常成熟的重型方案,我们暂时用 Spring 内置的 Logback 即可,更适合现在的这个项目。
配置 Logback 只需要在 resources 目录下新建一个 logback-spring.xml 文件,在其中配置:
<?xml version="1.0" encoding="UTF-8" ?> <configuration> <springProperty scope="context" name="logging.file.path" source="logging.file.path"/> <contextName>wxbox</contextName> <appender name="consoleLog" class="ch.qos.logback.core.ConsoleAppender"> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <pattern>%yellow(%d{yyyy-MM-dd HH:mm:ss}) %red([%thread]) %highlight(%-5level) %cyan(%logger{50}) - %magenta(%msg) %n</pattern> <charset>UTF-8</charset> </encoder> </appender> <appender name="fileInfoLog" class="ch.qos.logback.core.rolling.RollingFileAppender"> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>ERROR</level> <onMatch>DENY</onMatch> <onMismatch>ACCEPT</onMismatch> </filter> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <pattern> %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{50} - %msg%n </pattern> <charset>UTF-8</charset> </encoder> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${logging.file.path}/wxbox.info.%d{yyyy-MM-dd}.log</fileNamePattern> <MaxHistory>90</MaxHistory> <totalSizeCap>1GB</totalSizeCap> </rollingPolicy> </appender> <appender name="fileErrorLog" class="ch.qos.logback.core.rolling.RollingFileAppender"> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>ERROR</level> </filter> <encoder> <pattern> %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{50} - %msg%n </pattern> </encoder> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${logging.file.path}/wxbox.error.%d{yyyy-MM-dd}.log</fileNamePattern> <MaxHistory>90</MaxHistory> </rollingPolicy> </appender> <root level="info"> <appender-ref ref="consoleLog"/> <appender-ref ref="fileInfoLog"/> <appender-ref ref="fileErrorLog"/> </root> </configuration> 复制代码
大概说明一下几大块内容:
• 通过 springProperty 标签声明并创建了一个 logging.file.path 变量,对应在 application.yml 中的 logging.file.path 配置项,这样下面的标签里都可以使用这个变量,实现动态配置的目的。
• 每一个 appender 标签都可以看作一台打印机,可以是用于控制台输出的 ConsoleAppender,也可以是用于文件输出的 RollingFIleAppender。
• 每一个 appender 都可以通过 pattern 标签设置输出格式,对于控制台输出可以额外设置颜色,文件输出的话就没有颜色不颜色了,格式有非常多,可以去 官网文档 看看。
• 对于 RollingFIleAppender 可以设置滚动策略,比如按天为单位记录日志,记录的最大天数,单文件的最大文件大小等。
• 最后通过 root 标签创建这些 appender。