Spring-Boot 默认日志logback配置_Java_t0m的专栏-CSDN博客
SpringBoot默认采用了logback日志系统,也支持Log4j2、JDK (Java Util Logging)、SLF4J、Commons Logging等。下面说一下logback日志系统在SpringBoot中的配置。
如果日志需求简单,可以直接在application.properties中配置logback日志属性,否则可以自定义logback日志文件位置,然后根据自己需要配置logback内容。下面是一部分常用配置属性:
logging.file=xxxx.log //该属性指定日志文件名称
logging.path=/xxx/xxx //日志文件存储目录,当前目录 . 。
logging.file.max-size=2MB //单个日志文件大小,
logging.file.max-history=30 //日志文件保存30天的
logging.level.root=INFO //root日志打印级别
logging.level.xxx.xxx.xx=INFO //指定类或者包打印日志级别
项目中使用时,private Logger logger = LoggerFactory.getLogger(XXX.class);即可,该Logger为SLF4J的导入类。
日志系统在实际项目中一般需要个性化配置,所以可以通过下面的属性指定配置文件位置
logging.config=xxxxx
//该属性配置自定义日志文件位置,如果位于classpath根目录下,则直接填写文件名称即可。本例中使用logback, 位置位于src/main/resources/log下,配置应为:
logging.config=classpath:log/logback-spring.xml
关于logback配置文件名称,springboot官网推荐尽可能不要叫logback.xml,因为该文件在启动时就会加载,加载非常早,会导致配置文件中的springboot标签不识别。所以推荐命名xxxxx-spring.xml形式。
在springboot中的logback除了本身的标签外,还增加了<springProfile> 、 <springProperty>标签。
springProfile标签用于区分各个环境下配置文件,在application.properties中配置了spring.profiles.active=xxx后,该标签会加载指定的日志配置文件。
如:logback-spring.xml
<?xml version="1.0" encoding="UTF-8"?> <configuration debug="true" scan="true" scanPeriod="60 seconds"> <!-- scan日志刷新 scanPeriod不带单位时,单位为毫秒 --> <!-- 控制台输出 --> <appender name="Console" 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.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> </encoder> </appender> <!-- springProfile是springboot标签,可以配置运行时激活的配置 , 另外还有springProperty可以读取properties内的属性值应用到logback配置文件中 --> <springProfile name="dev"> <include resource="log/logback-spring-dev.xml" /> </springProfile> <springProfile name="test"> <include resource="log/logback-spring-test.xml" /> </springProfile> <springProfile name="pro"> <include resource="log/logback-spring-pro.xml" /> </springProfile> </configuration>
其中logback-spring-dev.xml、logback-spring-test.xml、logback-spring-pro.xml三个配置文件分别是开发、测试、生产环境下的日志配置信息。
logback-spring-dev.xml如下:其他不再列举
<?xml version="1.0" encoding="UTF-8"?> <included> <!-- 属性定义使用以及ref参照使用,必须有顺序,使用前必须已定义--> <!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径 --> <property name="LOG_HOME" value="D:/logs" /> <!-- 按照每天生成日志文件 --> <appender name="File" class="ch.qos.logback.core.rolling.RollingFileAppender"> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!--日志文件输出的文件名 --> <FileNamePattern>${LOG_HOME}/springboot.log.%d{yyyy-MM-dd}.log </FileNamePattern> <!--日志文件保留天数 --> <MaxHistory>30</MaxHistory> </rollingPolicy> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 --> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> </encoder> <!--日志文件最大的大小 --> <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> <MaxFileSize>2MB</MaxFileSize> </triggeringPolicy> </appender> <!-- 可以指定包或者类 --> <logger name="com.tom" level="INFO"> <appender-ref ref="File"></appender-ref> </logger> <!-- 日志输出级别 --> <root level="INFO"> <appender-ref ref="Console" /> </root> </included>
springProperty标签用于读取spring环境中property配置的属性值,springProperty有name属性,与logback中标签property作用类似,可以在配置文件的下文中通过${name}读取值。logback中配置定义有顺序,取值或者引用必须先声明后引用。
官文例子:
<springProperty scope="context" name="fluentHost" source="myapp.fluentd.host" defaultValue="localhost"/> <appender name="FLUENT" class="ch.qos.logback.more.appenders.DataFluentAppender"> <remoteHost>${fluentHost}</remoteHost> .... </appender>
此外,对于logback的变量取值${variableName},还支持默认值设置,比如:${LOG_HOME:-log}, 注意冒号后面要有个短横线 - , 横线后面的就是默认值,此外默认值也支持取定义好的变量如:${LOG_HOME:-${DEF_DIR}}
注意:使用springProperty springProfile标签则logback配置文件命名必须采用logback-spring.xml,否则spring标签不识别,控制台出现no applicable action for [springProperty]...的WARN警告。另外在logback-spring.xml中用到的properties属性尽量放在bootstrap.yml/properties文件中,bootstrap配置文件会在启动时首先加载,放到applicaiton.yml/properties中不会启动时马上加载,会出现刚开始启动时取不到值过会启动好了才取到值的情况。
附: logback