spring boot2 使用log4j2
程序员文章站
2022-09-04 14:23:02
spring boot默认使用的是logback,看到好多地方说logback比log4j耗性能,具体么我也没试过,不过个人还是log4j用得更多。 先看pom依赖 spring boot日志提供了三种日志的实现, Java Util Logging,Log4J2和 Logback 而选择这其中的一 ......
spring boot默认使用的是logback,看到好多地方说logback比log4j耗性能,具体么我也没试过,不过个人还是log4j用得更多。
先看pom依赖
<dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-web</artifactid> <exclusions> <exclusion> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-logging</artifactid> </exclusion> </exclusions> </dependency> <dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-log4j2</artifactid> </dependency>
spring boot日志提供了三种日志的实现, java util logging,log4j2和 logback
而选择这其中的一个需要设置系统属性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 |
|
log4j2 |
|
jdk (java util logging) |
|
所以这时候需要定制log配置的话可以在resource下创建 log4j2.xml就可以了
<?xml version="1.0" encoding="utf-8"?> <configuration status="warn"> <properties> <property name="pid">????</property> <property name="log_exception_conversion_word">%xwex</property> <property name="log_level_pattern">%5p</property> <property name="log_dateformat_pattern">yyyy-mm-dd hh:mm:ss.sss</property> <property name="console_log_pattern">%clr{%d{${log_dateformat_pattern}}}{faint} %clr{${log_level_pattern}} %clr{${sys:pid}}{magenta} %clr{---}{faint} %clr{[%15.15t]}{faint} %clr{%-40.40c{1.}}{cyan} %clr{:}{faint} %m%n${sys:log_exception_conversion_word}</property> <property name="file_log_pattern">%d{${log_dateformat_pattern}} ${log_level_pattern} ${sys:pid} --- [%t] %-40.40c{1.} : %m%n${sys:log_exception_conversion_word}</property> </properties> <appenders> <console name="console" target="system_out" follow="true"> <patternlayout pattern="${sys:console_log_pattern}" /> </console> </appenders> <loggers> <logger name="org.apache.catalina.startup.digesterfactory" level="error" /> <logger name="org.apache.catalina.util.lifecyclebase" level="error" /> <logger name="org.apache.coyote.http11.http11nioprotocol" level="warn" /> <logger name="org.apache.sshd.common.util.securityutils" level="warn"/> <logger name="org.apache.tomcat.util.net.nioselectorpool" level="warn" /> <logger name="org.eclipse.jetty.util.component.abstractlifecycle" level="error" /> <logger name="org.hibernate.validator.internal.util.version" level="warn" /> <logger name="org.springframework.boot.actuate.endpoint.jmx" level="warn"/> <root level="info"> <appenderref ref="console" /> </root> </loggers> </configuration>
这是官方默认的配置,下面是我自己改了后的
<?xml version="1.0" encoding="utf-8"?> <!--日志级别以及优先级排序: off > fatal > error > warn > info > debug > trace > all --> <!--configuration后面的status,这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,你会看到log4j2内部各种详细输出--> <!--monitorinterval:log4j能够自动检测修改配置 文件和重新配置本身,设置间隔秒数--> <configuration status="warn" monitorinterval="30"> <properties> <property name="pid">????</property> <property name="log_exception_conversion_word">%xwex</property> <property name="log_level_pattern">%5p</property> <property name="log_dateformat_pattern">yyyy-mm-dd hh:mm:ss.sss</property> <property name="console_log_pattern">%clr{%d{${log_dateformat_pattern}}}{faint} %clr{${log_level_pattern}} %clr{${sys:pid}}{magenta} %clr{---}{faint} %clr{[%15.15t]}{faint} %clr{%-40.40c{1.}}{cyan} %clr{:}{faint} %m%n${sys:log_exception_conversion_word}</property> <property name="file_log_pattern">%d{${log_dateformat_pattern}} ${log_level_pattern} ${sys:pid} --- [%t] %-40.40c{1.} : %m%n${sys:log_exception_conversion_word}</property> </properties> <!--先定义所有的appender--> <appenders> <!--这个输出控制台的配置--> <console name="console" target="system_out" follow="true"> <patternlayout pattern="${sys:console_log_pattern}" /> </console> <!--文件会打印出所有信息,这个log每次运行程序会自动清空,由append属性决定,这个也挺有用的,适合临时测试用--> <!--<file name="log" filename="log/test.log" append="false">--> <!--<patternlayout pattern="%d{hh:mm:ss.sss} %-5level %class{36} %l %m - %msg%xex%n"/>--> <!--</file>--> <!-- 这个会打印出所有的info及以下级别的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档--> <rollingfile name="rollingfileinfo" filename="./logs/info.log" filepattern="./logs/$${date:yyyy-mm}/info-%d{yyyy-mm-dd}-%i.log"> <!--控制台只输出level及以上级别的信息(onmatch),其他的直接拒绝(onmismatch)--> <thresholdfilter level="info" onmatch="accept" onmismatch="deny"/> <patternlayout pattern="[%d{hh:mm:ss:sss}] [%p] - %l - %m%n"/> <policies> <timebasedtriggeringpolicy/> <sizebasedtriggeringpolicy size="100 mb"/> </policies> </rollingfile> <rollingfile name="rollingfilewarn" filename="./logs/warn.log" filepattern="./logs/$${date:yyyy-mm}/warn-%d{yyyy-mm-dd}-%i.log"> <thresholdfilter level="warn" onmatch="accept" onmismatch="deny"/> <patternlayout pattern="[%d{hh:mm:ss:sss}] [%p] - %l - %m%n"/> <policies> <timebasedtriggeringpolicy/> <sizebasedtriggeringpolicy size="100 mb"/> </policies> <!-- defaultrolloverstrategy属性如不设置,则默认为最多同一文件夹下7个文件,这里设置了20 --> <defaultrolloverstrategy max="20"/> </rollingfile> <rollingfile name="rollingfileerror" filename="./logs/error.log" filepattern="./logs/$${date:yyyy-mm}/error-%d{yyyy-mm-dd}-%i.log"> <thresholdfilter level="error" onmatch="accept" onmismatch="deny"/> <patternlayout pattern="[%d{hh:mm:ss:sss}] [%p] - %l - %m%n"/> <policies> <timebasedtriggeringpolicy/> <sizebasedtriggeringpolicy size="100 mb"/> </policies> </rollingfile> <!-- sql输出文件 --> <rollingfile name="sql" filename="./logs/sql.log" filepattern="./logs/$${date:yyyy-mm}/sql-%d{yyyy-mm-dd}-%i.log"> <thresholdfilter level="debug" onmatch="accept" onmismatch="deny"/> <patternlayout pattern="[%d{hh:mm:ss:sss}] [%p] - %l - %m%n"/> <policies> <timebasedtriggeringpolicy/> <sizebasedtriggeringpolicy size="100 mb"/> </policies> </rollingfile> </appenders> <!--然后定义logger,只有定义了logger并引入的appender,appender才会生效--> <loggers> <logger name="org.apache.catalina.startup.digesterfactory" level="error" /> <logger name="org.apache.catalina.util.lifecyclebase" level="error" /> <logger name="org.apache.coyote.http11.http11nioprotocol" level="warn" /> <logger name="org.apache.sshd.common.util.securityutils" level="warn"/> <logger name="org.apache.tomcat.util.net.nioselectorpool" level="warn" /> <logger name="org.eclipse.jetty.util.component.abstractlifecycle" level="error" /> <logger name="org.hibernate.validator.internal.util.version" level="warn" /> <logger name="org.springframework.boot.actuate.endpoint.jmx" level="warn"/> <!--输出sql--> <logger name="com.qthl.wf.dao" level="debug" additivity="false"> <appender-ref ref="console"/> <appender-ref ref="sql"/> </logger> <root level="info"> <appender-ref ref="console"/> <appender-ref ref="rollingfileinfo"/> <appender-ref ref="rollingfilewarn"/> <appender-ref ref="rollingfileerror"/> </root> </loggers> </configuration>
推荐阅读
-
Mybaits 源码解析 (十)----- 全网最详细,没有之一:Spring-Mybatis框架使用与源码解析
-
spring boot 枚举使用的坑整理
-
Spring Boot2 系列教程 (二) | 第一个 SpringBoot 工程详解
-
实战SpringCloud响应式微服务系列教程(第九章)使用Spring WebFlux构建响应式RESTful服务
-
Spring Boot2.3 新特性分层JAR的使用
-
Spring ApplicationListener的使用详解
-
使用netbeans搭建jsf+spring框架的方法
-
如何在Spring Boot中使用Quartz
-
Spring框架的使用
-
Spring Boot使用yml格式进行配置的方法