欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

log4j2+slf4j+spring4+mybatis的整合使用

程序员文章站 2022-03-05 12:34:53
...

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>
<!-- 异步日志依赖 -->
<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>

    同时请使用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>

    3、打印mybatis的sql,如上图所示,仅仅需要指定dao所在的文件夹即可。在Mybatis的配置文件中可以继续使用slfj4impl。

     <setting name="logImpl" value="SLF4J"/> 无需改成log4j2的实现。

    4、如果需要更加深刻的了解log4j2的事件级别和配置级别,以及更复杂的配置,可参考log4j2的官方文档。