log4j2+slf4j+spring4+mybatis的整合使用
程序员文章站
2022-03-05 12:29:05
...
log4j从1到2有不少的变化和增强。所以考虑将项目中的log4j1更换成log4j2,同时仍然使用slf4j的适配,更换过程如下。
1、maven的改变,移除log4j1的依赖,添加log4j2的依赖,替换完成后,maven的最终文件为
maven配置 写道
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.9.1</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.9.1</version>
</dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.9.1</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.9.1</version>
</dependency>
<!-- 异步日志依赖 -->
<dependency>
<groupId>com.lmax</groupId>
<artifactId>disruptor</artifactId>
<version>3.3.7</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>2.9.1</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-web</artifactId>
<version>2.9.1</version>
</dependency>
<groupId>com.lmax</groupId>
<artifactId>disruptor</artifactId>
<version>3.3.7</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>2.9.1</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-web</artifactId>
<version>2.9.1</version>
</dependency>
<!-- 继续保持使用slf4j -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.25</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>1.7.25</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jul-to-slf4j</artifactId>
<version>1.7.25</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.25</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>1.7.25</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jul-to-slf4j</artifactId>
<version>1.7.25</version>
</dependency>
同时请使用jdk7及以上。
2、如果使用servlet3以上,请去除web.xml中关于Log4j的配置项。log4j2可自动识别配置文件。同时在web的根目录下,加入一个log4j2.xml的配置文件。
log4j2简单配置文件 写道
<?xml version="1.0" encoding="UTF-8"?>
<!-- 根据monitorInterval会自动检测该配置文件并更新日志配置 -->
<Configuration status="off" monitorInterval="1800">
<!-- 属性文件配置,后续可以使用${}格式调用 -->
<properties>
<property name="LOG_HOME">/usr/scm/logs/</property>
<property name="ERROR_LOG_FILE_NAME">scm</property>
</properties>
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d %-5p (%F:%L) - %m%n" />
</Console>
<RollingRandomAccessFile name="ErrorLog"
fileName="${LOG_HOME}/${ERROR_LOG_FILE_NAME}.log"
filePattern="${LOG_HOME}/${ERROR_LOG_FILE_NAME}.log.%d{yyyy-MM-dd}.gz">
<PatternLayout
pattern="%d %-5p (%F:%L) - %m%n"/>
<Policies>
<TimeBasedTriggeringPolicy/>
<SizeBasedTriggeringPolicy size="100MB"/>
</Policies>
<DefaultRolloverStrategy max="20"/>
</RollingRandomAccessFile>
</Appenders>
<Loggers>
<!-- 3rdparty Loggers -->
<logger name="org.springframework" level="warn"></logger>
<!-- 打印SQL仅需指定dao所在bao的debug级别,其他配置已不需要,但不支持通配符 -->
<logger name="com.scm" level="info" includeLocation="true" additivity="false">
<appender-ref ref="ErrorLog"/>
<appender-ref ref="Console"/>
</logger>
<root level="info" includeLocation="true">
<appender-ref ref="Console"/>
</root>
</Loggers>
</Configuration>
<!-- 根据monitorInterval会自动检测该配置文件并更新日志配置 -->
<Configuration status="off" monitorInterval="1800">
<!-- 属性文件配置,后续可以使用${}格式调用 -->
<properties>
<property name="LOG_HOME">/usr/scm/logs/</property>
<property name="ERROR_LOG_FILE_NAME">scm</property>
</properties>
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d %-5p (%F:%L) - %m%n" />
</Console>
<RollingRandomAccessFile name="ErrorLog"
fileName="${LOG_HOME}/${ERROR_LOG_FILE_NAME}.log"
filePattern="${LOG_HOME}/${ERROR_LOG_FILE_NAME}.log.%d{yyyy-MM-dd}.gz">
<PatternLayout
pattern="%d %-5p (%F:%L) - %m%n"/>
<Policies>
<TimeBasedTriggeringPolicy/>
<SizeBasedTriggeringPolicy size="100MB"/>
</Policies>
<DefaultRolloverStrategy max="20"/>
</RollingRandomAccessFile>
</Appenders>
<Loggers>
<!-- 3rdparty Loggers -->
<logger name="org.springframework" level="warn"></logger>
<!-- 打印SQL仅需指定dao所在bao的debug级别,其他配置已不需要,但不支持通配符 -->
<logger name="com.scm" level="info" includeLocation="true" additivity="false">
<appender-ref ref="ErrorLog"/>
<appender-ref ref="Console"/>
</logger>
<root level="info" includeLocation="true">
<appender-ref ref="Console"/>
</root>
</Loggers>
</Configuration>
3、打印mybatis的sql,如上图所示,仅仅需要指定dao所在的文件夹即可。在Mybatis的配置文件中可以继续使用slfj4impl。
<setting name="logImpl" value="SLF4J"/> 无需改成log4j2的实现。
4、如果需要更加深刻的了解log4j2的事件级别和配置级别,以及更复杂的配置,可参考log4j2的官方文档。
上一篇: spring-cache的使用
下一篇: JSP文件下载