spring boot2 使用 log4j2
spring boot 默认使用 logback。我见过很多地方说logback比log4j消耗更多的性能。我还没有尝试过,但我仍然更个人地使用 log4j。
先看pom依赖
<依赖>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<排除>
<排除>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</排除>
</排除>
</依赖>
<依赖>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</依赖>
spring boot log 提供了三种日志实现Java Util Logging,Log4J2SumLogback
要选择其中之一,您需要设置系统属性 org.springframework.boot.logging.LoggingSystem。一开始我是直接在启动类中设置的
System.setProperty("org.springframework.boot.logging.LoggingSystem","Log4J2");
然而,发现并非如此。后来看了下代码,发现这几行

试试看。真实的设定是这样的
System.setProperty("org.springframework.boot.logging.LoggingSystem","org.springframework.boot.logging.log4j2.Log4J2LoggingSystem");
使用不同的日志实现,系统默认会加载以下文件
回溯
logback-spring.xml、logback-spring.groovy、logback.xml 或 logback.groovy
日志4j2
log4j2-spring.xml 或 log4j2.xml
JDK(Java 实用程序日志记录)
日志记录属性
所以此时如果需要自定义日志配置,可以在resource下创建log4j2.xml
<?xml 版本u003d"1.0" 编码u003d"UTF-8"?>
<配置状态\u003d"警告">
<属性>
<属性名\u003d"PID">????</属性>
<属性名称\u003d"LOG_EXCEPTION_CONVERSION_WORD">%xwEx</Property>
<属性名称\u003d"LOG_LEVEL_PATTERN">%5p</属性>
<属性名称\u003d"LOG_DATEFORMAT_PATTERN">yyyy-MM-dd HH:mm:ss.SSS</Property>
<属性名称\u003d"CONSOLE_LOG_PATTERN">%clr{%d{${LOG_DATEFORMAT_PATTERN}}}{faint} %clr{${LOG_LEVEL_PATTERN}} %clr{$ {sys:PID}}{洋红色} %clr{---}{faint} %clr{[%15.15t]}{faint} %clr{%-40.40c{1.}}{青色} %clr {:}{faint} %m%n${sys:LOG_EXCEPTION_CONVERSION_WORD}</Property>
<属性名称\u003d"FILE_LOG_PATTERN">%d{${LOG_DATEFORMAT_PATTERN}} ${LOG_LEVEL_PATTERN} ${sys:PID} --- [%t] %-40.40c{1.} : %m%n${sys:LOG_EXCEPTION_CONVERSION_WORD}</Property>
</属性>
<附加程序>
<控制台名称\u003d"控制台"目标\u003d"SYSTEM_OUT"跟随\u003d"true">
<PatternLayout pattern\u003d"${sys:CONSOLE\LOG\PATTERN}" />
</控制台>
</Appenders>
<记录器>
<Logger name\u003d"org.apache.catalina.startup.DigesterFactory" level\u003d"error" />
<Logger name\u003d"org.apache.catalina.util.LifecycleBase" level\u003d"error" />
<Logger name\u003d"org.apache.coyote.http11.Http11NioProtocol" level\u003d"warn" />
<logger name\u003d"org.apache.sshd.common.util.SecurityUtils" 级别\u003d"warn"/>
<Logger name\u003d"org.apache.tomcat.util.net.NioSelectorPool" level\u003d"warn" />
<Logger name\u003d"org.eclipse.jetty.util.component.AbstractLifeCycle" level\u003d"error" />
<Logger name\u003d"org.hibernate.validator.internal.util.Version" level\u003d"warn" />
<logger name\u003d"org.springframework.boot.actuate.endpoint.jmx" level\u003d"warn"/>
<根级别\u003d"信息">
<AppenderRef ref\u003d"Console" />
</根>
</记录器>
</配置>
这是官方默认配置。这是我自己修改的配置
<?xml 版本u003d"1.0" 编码u003d"UTF-8"?>
<!--日志级别和优先级排序:OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->
<!--Configuration Hinder status,这个是用来设置log4j2本身的内部信息输出,设置成trace的时候不能设置自己的内部信息输出,当你看到log4j2的各种内部详细输出-->
<!--monitorInterval: Log4j 可以自动检测修改配置文件并自行重新配置,设置间隔以秒为单位-->
<配置状态\u003d"WARN" monitorInterval\u003d"30">
<属性>
<属性名\u003d"PID">????</属性>
<属性名称\u003d"LOG_EXCEPTION_CONVERSION_WORD">%xwEx</Property>
<属性名称\u003d"LOG_LEVEL_PATTERN">%5p</属性>
<属性名称\u003d"LOG_DATEFORMAT_PATTERN">yyyy-MM-dd HH:mm:ss.SSS</Property>
<属性名称\u003d"CONSOLE_LOG_PATTERN">%clr{%d{${LOG_DATEFORMAT_PATTERN}}}{faint} %clr{${LOG_LEVEL_PATTERN}} %clr{$ {sys:PID}}{洋红色} %clr{---}{faint} %clr{[%15.15t]}{faint} %clr{%-40.40c{1.}}{青色} %clr {:}{faint} %m%n${sys:LOG_EXCEPTION_CONVERSION_WORD}</Property>
<属性名称\u003d"FILE_LOG_PATTERN">%d{${LOG_DATEFORMAT_PATTERN}} ${LOG_LEVEL_PATTERN} ${sys:PID} --- [%t] %-40.40c{1.} : %m%n${sys:LOG_EXCEPTION_CONVERSION_WORD}</Property>
</属性>
<!--定义所有第一个appender-->
<附加程序>
<!--此输出控制台的配置-->
<控制台名称\u003d"控制台"目标\u003d"SYSTEM_OUT"跟随\u003d"true">
<PatternLayout pattern\u003d"${sys:CONSOLE\LOG\PATTERN}" />
</控制台>
<!--文件会打印出所有的信息,这个log每次程序运行都会被append属性判断自动清空,这个也很有用,适合临时测试-->
<!--<File nameu003d"log" fileNameu003d"log/test.log" appendu003d"false">-->
<!--<PatternLayout patternu003d"%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>-->
<!--</文件>-->
<!-- 这会打印所有的info和下面,每次超过size,那么这个size的日志会自动按年保存--当月创建的文件夹被压缩为存档-->
<RollingFile 名称\u003d"RollingFileInfo" 文件名\u003d"./logs/info.log"
filePattern\u003d"./logs/$${date:yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log">
<!--控制台只输出level及以上(onMatch),其他直接拒绝(onMismatch)-->
<ThresholdFilter level\u003d"info" onMatch\u003d"ACCEPT" onMismatch\u003d"DENY"/>
<PatternLayout pattern\u003d"[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
<政策>
<TimeBasedTriggeringPolicy/>
<SizeBasedTriggeringPolicy 大小\u003d"100 MB"/>
</政策>
</滚动文件>
<RollingFile 名称\u003d"RollingFileWarn" 文件名\u003d"./logs/warn.log"
filePattern\u003d"./logs/$${date:yyyy-MM}/warn-%d{yyyy-MM-dd}-%i.log">
<ThresholdFilter level\u003d"warn" onMatch\u003d"ACCEPT" onMismatch\u003d"DENY"/>
<PatternLayout pattern\u003d"[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
<政策>
<TimeBasedTriggeringPolicy/>
<SizeBasedTriggeringPolicy 大小\u003d"100 MB"/>
</政策>
<!-- DefaultRolloverStrategy 如果不设置该属性,则默认值为同一个文件夹下最多7个文件。这里设置了20个文件-->
<DefaultRolloverStrategy max\u003d"20"/>
</滚动文件>
<RollingFile 名称\u003d"RollingFileError" 文件名\u003d"./logs/error.log"
filePattern\u003d"./logs/$${date:yyyy-MM}/error-%d{yyyy-MM-dd}-%i.log">
<ThresholdFilter level\u003d"error" onMatch\u003d"ACCEPT" onMismatch\u003d"DENY"/>
<PatternLayout pattern\u003d"[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
<政策>
<TimeBasedTriggeringPolicy/>
<SizeBasedTriggeringPolicy 大小\u003d"100 MB"/>
</政策>
</滚动文件>
<!-- sql输出文件-->
<滚动文件名\u003d"SQL" 文件名\u003d"./logs/sql.log"
filePattern\u003d"./logs/$${date:yyyy-MM}/sql-%d{yyyy-MM-dd}-%i.log">
<ThresholdFilter level\u003d"debug" onMatch\u003d"ACCEPT" onMismatch\u003d"DENY"/>
<PatternLayout pattern\u003d"[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
<政策>
<TimeBasedTriggeringPolicy/>
<SizeBasedTriggeringPolicy 大小\u003d"100 MB"/>
</政策>
</滚动文件>
</appenders>
<!--然后定义logger,只定义了logger并引入了appender,appender才会生效-->
<记录器>
<Logger name\u003d"org.apache.catalina.startup.DigesterFactory" level\u003d"error" />
<Logger name\u003d"org.apache.catalina.util.LifecycleBase" level\u003d"error" />
<Logger name\u003d"org.apache.coyote.http11.Http11NioProtocol" level\u003d"warn" />
<logger name\u003d"org.apache.sshd.common.util.SecurityUtils" 级别\u003d"warn"/>
<Logger name\u003d"org.apache.tomcat.util.net.NioSelectorPool" level\u003d"warn" />
<Logger name\u003d"org.eclipse.jetty.util.component.AbstractLifeCycle" level\u003d"error" />
<Logger name\u003d"org.hibernate.validator.internal.util.Version" level\u003d"warn" />
<logger name\u003d"org.springframework.boot.actuate.endpoint.jmx" level\u003d"warn"/>
<!--输出sql-->
<logger name\u003d"com.qthl.wf.dao" level\u003d"debug" additivity\u003d"false">
<appender-ref ref\u003d"Console"/>
<appender-ref ref\u003d"SQL"/>
</记录器>
<根级别\u003d"信息">
<appender-ref ref\u003d"Console"/>
<appender-ref ref\u003d"RollingFileInfo"/>
<appender-ref ref\u003d"RollingFileWarn"/>
<appender-ref ref\u003d"RollingFileError"/>
</根>
</记录者>
</配置>
更多推荐

所有评论(0)