slf4j+log4j升级log4j2

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了slf4j+log4j升级log4j2相关的知识,希望对你有一定的参考价值。

首先在pom文件中加入以下依赖

<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-api</artifactId>
    <version>2.6.2</version>
</dependency>
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>2.6.2</version>
</dependency>
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-web</artifactId>
    <version>2.6.2</version>
</dependency>
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.12</version>
</dependency>
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>jcl-over-slf4j</artifactId>
    <version>1.7.12</version>
</dependency>
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-slf4j-impl</artifactId>
    <version>2.6.2</version>
</dependency>

删除原来的slf4j依赖

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
    <version>1.7.7</version>
</dependency>

重写log4j.xml配置文件

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN" monitorInterval="60">
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT"> <!-- 定义类型为Console的Appender -->
            <PatternLayout pattern="%d [%t] %-5p %c{1} [%L] - %m%n"/> <!-- 定义类型为Pattern的Layout -->
        </Console>
                <RollingRandomAccessFile name="rollingRandomAccessFileAppender" immediateFlush="true" fileName="${logPath}/acc.log"
            filePattern="${logPath}/acc.log.%d{yyyy-MM-dd-HH}" append="true">
            <PatternLayout pattern="%d [%t] %-5p %c{1} [%L] - %m%n" />
            <Policies>
                <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
            </Policies>
        </RollingRandomAccessFile>
    </Appenders>
    <Loggers>
        <Root level="info"> <!-- 定义Root Logger,其日志级别为info -->
            <AppenderRef ref="Console"/> <!-- Root Logger的Appender引用上面定义的Console -->
        </Root>
        <Logger name="HelloWorld" level="info" additivity="false"> <!-- 定义名字为HelloWorld的Logger,其日志级别为info,additivity为false -->
            <AppenderRef ref="Console"/> <!-- Root Logger的Appender引用上面定义的Console -->
                        <AppenderRef ref="rollingRandomAccessFileAppender"/>
        </Logger>
    </Loggers>
</Configuration>

项目中原来的log4j是根据每个小时打印日志,因此用了RollingRandomAccessFile。


然后,将log4j.xml重新命名为log4j2.xml,并且在web.xml中取消原来的context配置!
由于上面这一点一开始没有做,只是在原来log4j.xml的基础上把内容修改了,所以打包到服务器上运行时,一直没有日志文件输出,因为pom文件中依赖的其他项目带有log4j相关的jar包,slf4j不知道该使用哪一个。

升级完毕。

以上是关于slf4j+log4j升级log4j2的主要内容,如果未能解决你的问题,请参考以下文章

log4j升级为log4j2(无需改动代码)

slf4j 搭配 log4j2 处理日志

Apache Log4j2团队宣布Log4j 2.16.0发布,强烈建议升级

log4j2漏洞CVE44228官方修复方案

如果我们将它与slf4j api一起使用,我们可以使用log4j2的所有功能吗?

Slf4j与log4j及log4j2的关系及使用方法