Springboot默认使用的日志框架是Logback
在项目中,我们使用Logback,其实只需增加一个logback-spring.xml或logback.xml配置文件即可。
分环境配置:
当我们想根据不同环境如dev、sit、pro配置不同的日志配置时,就需要配合springboot的application.yml一起定义,配置如下:
首先,假设项目已经有application-dev.yml配置文件,只需在其中添加:
logging:
#Linux下使用classpath:/logback-dev.xml
#Windows下使用./src/main/resources/logback-dev.xml
config: ./src/main/resources/logback-dev.xml
然后,在/src/main/resources目录下创建logback-dev.xml,内容如下:
<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
<!-- 属性文件:在properties或yml文件中找到对应的配置项 -->
<springProperty scope="context" name="logging.path" source="logging.path"/>
<contextName>tesseract-ocr</contextName>
<appender name="consoleLog" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出(配色):%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{50} - %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.path}/demo.info.%d{yyyy-MM-dd}.log</fileNamePattern>
<!--保存时长-->
<MaxHistory>10</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.path}/demo.error.%d{yyyy-MM-dd}.log</fileNamePattern>
<MaxHistory>10</MaxHistory>
</rollingPolicy>
</appender>
<root level="debug">
<appender-ref ref="consoleLog"/>
<!-- <appender-ref ref="fileInfoLog"/>
<appender-ref ref="fileErrorLog"/> -->
</root>
</configuration>
最后,根据不同环境对配置文件的内容做类似的修改即可。
使用技巧
日志文件保存路径配置技巧
通常情况下我们一般把日志文件保存路径配置通过<property scope="system" name="LOG_DIR" value="./logs" />配置。通过${LOG_DIR}来使用,此种配置方法把路径固定在了logback的配置文件中,为了后续更方便配置我们可以将其通过如下方式改进一下。
在上边的logback-dev.xml配置中有这么一项:<springProperty scope="context" name="logging.path" source="logging.path"/>
此配置的作用就是把日志文件的保存路径配置交给application-dev.yml来配置,只要在application-dev.yml中添加如下配置即可:
logging:
path: ./logs
注意名称须一致。
日志级别控制
从上边的DEMO中我们知道日志级别是通过<root level="debug">配置的。我们也可以通过springboot配置。只要application-dev.yml中添加:
logging:
level:
root: info
即可。注意如果在application-dev.yml配置了日志级别那么logback-dev.xml的root配置的级别将失效,项目启动日志级别将以application中配置的级别为准。
对项目中的某一个类指定专门的日志处理
在实际应用场景中,我们可遇到需要单独对项目中的某一个业务处理类进行单独的日志处理。此时可通过如下方式解决;
假如项目中有一个schedule的任务调度类,我们需要做单独的日志处理,则配置如下:
<!--特殊功能单独appender 例如调度类的日志-->
<appender name="CLASS-APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFO</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.path}/schedule.class.%d{yyyy-MM-dd}.log</fileNamePattern>
<MaxHistory>90</MaxHistory>
</rollingPolicy>
</appender>
<!--这里的name和业务类中的getLogger中的字符串是一样的-->
<logger name="schedule" level="INFO" additivity="true">
<appender-ref ref="CLASS-APPENDER" />
</logger>
注意logger的name就是private Logger LOGGER= LoggerFactory.getLogger("schedule");中的字符串。
如果我们使用的是lomok插件,则schedule指的是topic
@Slf4j(topic = "schedule")
public class ScheduleService{
}