第一步导入Jar包:
注意:spring 版本,5.0.2.RELEASE。
<!-- slf4j核心包-->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.30</version>
</dependency>
<!--slf4j对应log4j2的中间件,即桥接 -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>2.13.1</version>
</dependency>
<!-- log4j2 -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.13.1</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-web</artifactId>
<version>2.13.1</version>
<scope>runtime</scope>
</dependency>
<!--log4j2 异步依赖-->
<dependency>
<groupId>com.lmax</groupId>
<artifactId>disruptor</artifactId>
<version>3.3.6</version>
</dependency>
第二步,web.xml
<!-- log4j2-begin -->
<listener>
<listener-class>org.apache.logging.log4j.web.Log4jServletContextListener</listener-class>
</listener>
<filter>
<filter-name>log4jServletFilter</filter-name>
<filter-class>org.apache.logging.log4j.web.Log4jServletFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>log4jServletFilter</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
<dispatcher>INCLUDE</dispatcher>
<dispatcher>ERROR</dispatcher>
</filter-mapping>
<!-- log4j2-end -->
第三步,log4j2.xml
<?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="1800">
<Properties>
<!-- 日志默认存放的位置,这里设置为项目根路径下,也可指定绝对路径 -->
<!-- ${web:rootDir}是web项目根路径,java项目没有这个变量,需要删掉,否则会报异常 -->
<property name="LOG_HOME">F://logs</property>
<property name="FILE_NAME_PREFIX">demo</property>
<!-- <property name="basePath">d:/qfxSpringMVCMybaitsDemoLogs</property> -->
<!-- 控制台默认输出格式,"%-5level":日志级别,"%l":输出完整的错误位置,是小写的L,因为有行号显示,所以影响日志输出的性能 -->
<property name="console_log_pattern">[测试 %d{yyy-MM-dd HH:mm:ss,SSS}](%p) - %c - (%F:%L) %m %n</property>
<!-- 日志文件默认输出格式,不带行号输出(行号显示会影响日志输出性能);%C:大写,类名;%M:方法名;%m:错误信息;%n:换行 -->
<property name="log_pattern">[测试 %d{yyy-MM-dd HH:mm:ss,SSS}](%p) - %c - (%F:%L) %m %n</property>
<!-- 日志默认切割的最小单位 -->
<property name="every_file_size">200MB</property>
<!-- 日志默认输出级别 -->
<property name="output_log_level">INFO</property>
<!-- Info日志默认存放路径(Info级别日志) -->
<property name="info_fileName">${LOG_HOME}/info.log</property>
<!-- Info日志默认压缩路径,作为存档 -->
<property name="info_filePattern">${LOG_HOME}/$${date:yyyy-MM}/${FILE_NAME_PREFIX}-info-%d{yyyyMMdd}-%i.log</property>
<!-- Info日志默认同一文件夹下可以存放的数量,不设置此属性则默认为7个 -->
<property name="info_max">10</property>
<!-- Error日志默认存放路径(Error级别日志) -->
<property name="error_fileName">${LOG_HOME}/error.log</property>
<!-- Error日志默认压缩路径,作为存档 -->
<property name="error_filePattern">${LOG_HOME}/$${date:yyyy-MM}/${FILE_NAME_PREFIX}-error-%d{yyyyMMdd}-%i.log</property>
<!-- Error日志默认同一文件夹下可以存放的数量,不设置此属性则默认为7个 -->
<property name="error_max">10</property>
<!-- 控制台显示的日志最低级别 -->
<property name="console_print_level">DEBUG</property>
</Properties>
<!--定义appender -->
<appenders>
<!-- 用来定义输出到控制台的配置 -->
<Console name="Console" target="SYSTEM_OUT">
<!-- 设置控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
<ThresholdFilter level="${console_print_level}" onMatch="ACCEPT" onMismatch="DENY"/>
<!-- 设置输出格式,不设置默认为:%m%n -->
<PatternLayout pattern="${console_log_pattern}"/>
</Console>
<!-- 打印INFO级别的日志到文件 -->
<RollingFile name="InfoFile" fileName="${info_fileName}" filePattern="${info_filePattern}">
<ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/>
<PatternLayout pattern="${log_pattern}"/>
<Policies>
<TimeBasedTriggeringPolicy/>
<SizeBasedTriggeringPolicy size="${every_file_size}"/>
</Policies>
<!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件,这里设置了20 -->
<DefaultRolloverStrategy max="20"/>
</RollingFile>
<!-- 打印ERROR级别的日志到文件 -->
<RollingFile name="ErrorFile" fileName="${error_fileName}" filePattern="${error_filePattern}">
<ThresholdFilter level="ERROR" onMatch="ACCEPT" onMismatch="DENY"/>
<PatternLayout pattern="${log_pattern}"/>
<Policies>
<TimeBasedTriggeringPolicy/>
<SizeBasedTriggeringPolicy size="${every_file_size}"/>
</Policies>
<!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件,这里设置了20 -->
<DefaultRolloverStrategy max="20"/>
</RollingFile>
</appenders>
<!--然后定义logger,只有定义了logger并引入的appender,appender才会生效-->
<loggers>
<!-- 设置对打印sql语句的支持 -->
<AsyncLogger name="java.sql" level="debug" additivity="false">
<appender-ref ref="Console"/>
</AsyncLogger>
<!--建立一个默认的root的logger-->
<root level="${output_log_level}" includeLocation="true">
<appender-ref ref="Console"/>
<appender-ref ref="InfoFile"/>
<appender-ref ref="ErrorFile"/>
</root>
</loggers>
</configuration>
第四步,配置系统参数,文件名必须这个系统默认:log4j2.component.properties
注意:去掉之前的log4j.properties配置文件,如果有!
Log4jContextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector
第五步,验证是否正常启动和是否异步
1.需要打印log4j2的调试日志修改 log4j2.xml中参数改为debug
<configuration status="debug" monitorInterval="1800">
启动之后看log4j2线程和启动日志,有以下两种情况说明是成功了:


最近老系统从log4j升级到log4j2折腾一些时间,为自己和大家以后能够快速配置而留下的笔记,还请大家多多指教啊。
1309

被折叠的 条评论
为什么被折叠?



