默认情况下SpringBoot程序运行时是不会将日志直接输出到文件的,而在创建Spring Boot工程时引入的spring-boot-starter就已经包含了spring-boot-starter-logging,该依赖内容就是Spring Boot默认的日志框架Logback,为了充分利用LogBack来打印程序运行日志,所以需要对此进行配置。
SpringBoot运行日志有两种配置方式,第一种就是在springboot的配置文件中(例如application.properties)简单地配置日志输出级别、日志输出路径、日志文件名来实现,第二种是指定日志配置文件,然后在日志配置文件中配置输出属性,该方法可以配置较复杂的日志输出,下面将分别罗列这两种方式。
方法一:
在sparingboot配置文件中配置:
logging.file=project.log
logging.path=/root/project
logging.level.root=warn
在上面的各项配置中,logging.file是指配置日志文件名,logging.path是配置日志输出路径,logging.level用于配置日志输出级别,后面跟着的root表示项目的所有日志级别为warn,可以根据需要指定具体的package来配置日志级别。
方法二:
在sparingboot配置文件中配置:
logging.config=classpath:logback-spring.xml
上面的配置意思为指定项目根目录下的logback-spring.xml为日志配置文件,该文件名可以根据需要自行调整,注意logback不能指定后缀为properties的配置文件。
logback-spring.xml配置参考:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<contextName>logback</contextName>
<property name="PROJECT_NAME" value="xxx" />
<property name="LOG_FILE_PATH" value="xxx" />
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_FILE_PATH}/${APP_NAME}-info.log</file>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_FILE_PATH}/${PROJECT_NAME}-info-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<maxHistory>15</maxHistory>
</rollingPolicy>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>info</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<root level="info">
<appender-ref ref="CONSOLE" />
<appender-ref ref="INFO_FILE" />
</root>
</configuration>
下面是对配置文件的部分配置说明:
property:该配置文件中通用的变量,name是变量的名称,value是变量定义的值,在该文件中可以通过${name}的方式来调用;
appender:日志输出节点,常用的有console、file、rollingfile和socker,其中console是指输出到控制台的输出节点,file是指输出到指定文件的输出节点,rollingfile是指超过指定大小自动归档(rolling)旧的创建新的日志的输出节点,socket是指输出到其他服务器中的输出节点;
encoder:日志文件输出格式;
file:日志输出路径及文件名;
rollingPolicy:日志滚动策略,例子中配置为按照时间滚动;
fileNamePattern:滚动日志文件路径及文件名配置;
maxFileSize:最大日志文件大小;
maxHistory:日志文件最大保留天数;
filter:日志过滤器,在appender中配置,有 三个返回值,分别是deny,neutral,accept。返回deny,表示日志将立即被抛弃;返回neutral,表示进入到下一个过滤器中进行处理;返回accept,日志会被立即处理,不再经过剩余过滤器,如果appender中有多个过滤器则按照顺序依次进行处理;
levelFilter:级别过滤器,该过滤器有三个子节点器:level、onMatch、OnMismatch,它会根据onMatch 和 onMismatch选择接收或拒绝日志,但该过滤器只会过滤出刚好符合日志级别的日志,此外还有一个过滤器为ThresholdFilter,这个过滤器会过滤掉低于指定临界值的日志,当日志级别等于或高于临界值时,过滤器返回NEUTRAL;当日志级别低于临界值时,日志会被拒绝;
以上是本次SpringBoot整合LogBack的经验总结。