log4j升级log4j2

1、单独使用log4j

如果在我们系统中单独使用log4j的话,我们只需要引入log4j的核心包就可以了,我这里用的是:log4j-1.2.17.jar,

<dependency>
  <groupId>log4j</groupId>
  <artifactId>log4j</artifactId>
  <version>1.2.17</version>
</dependency>

在src/main/resources添加log4j.properties文件,详见4。

然后在系统中使用如下代码输出日志:

public class Log4jTest {
    private static final org.apache.log4j.Logger logger = org.apache.log4j.Logger.getLogger(Log4jTest.class);

    public static void main(String[] args) {
        logger.info("hello word");
    }
}

也可以使用单元测试,测试其他日志输出功能。

2、单独使用log4j2

如果在我们系统中单独使用log4j2的话,我们只需要引入log4j2的核心包就可以了,我这里用的是:log4j-api-2.8.2.jar和log4j-core-2.8.2.jar:

<properties>
        <logging.log4j.version>2.8.2</logging.log4j.version>
 </properties>
......
<!-- log4j2 -->
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
            <version>${logging.log4j.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>${logging.log4j.version}</version>
        </dependency>

在src/main/resources添加log4j2.xml文件,配置文件见下面4.

然后在系统中使用如下代码输出日志:

public class Log4j2Test {
    private static org.apache.logging.log4j.Logger logger = org.apache.logging.log4j.LogManager.getLogger(Log4jTest.class);
    public static void main(String[] args) {
        logger.info("hello word");
    }
}

3、 log4j升级到log4j2,需要用到slf4j

如果原有系统日志框架使用的log4j,想要升级到log4j2,可以借助slf4j。

我们需要引入下面的jar包:
log4j2核心jar包:log4j-api-2.8.2.jar和log4j-core-2.8.2.jar
slf4j核心jar包:slf4j-api-1.6.4.jar (我没有引入这个包,依旧可以打印日志)
slf4j与log4j2的桥接包:log4j-slf4j-impl-2.8.2.jar,这个包的作用就是使用slf4j的api,但是底层实现是基于log4j2

<properties>
         <logging.log4j.version>2.8.2</logging.log4j.version>
    </properties>
<!-- log4j2 -->
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
            <version>${logging.log4j.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>${logging.log4j.version}</version>
        </dependency>
        <!-- slf4j Bridge -->
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-slf4j-impl</artifactId>
            <version>${logging.log4j.version}</version>
        </dependency>

所以我们获取日志仍可以通过下面的代码进行:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class Slf4jTest {
    private static final Logger logger = LoggerFactory.getLogger(Slf4jTest2.class);

    public static void main(String[] args) {
        logger.info("hello world");
    }

4、日志配置文件

使用log4J,需要在src/main/resources添加log4j.properties文件:

#定义LOG输出级别
log4j.rootLogger=INFO,Console,File
#定义日志输出目的地为控制台
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.Target=System.out
#可以灵活地指定日志输出格式,下面一行是指定具体的格式
log4j.appender.Console.layout = org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=[%c] - %m%n
#文件大小到达指定尺寸的时候产生一个新的文件
log4j.appender.File = org.apache.log4j.RollingFileAppender
#指定输出目录
log4j.appender.File.File = logs/ssm.log
#定义文件最大大小
log4j.appender.File.MaxFileSize = 10MB
# 输出所以日志,如果换成DEBUG表示输出DEBUG以上级别日志
log4j.appender.File.Threshold = ALL
log4j.appender.File.layout = org.apache.log4j.PatternLayout
log4j.appender.File.layout.ConversionPattern =[%p] [%d{yyyy-MM-dd HH\:mm\:ss}][%c]%m%n

使用log4j2,需要在src/main/resources添加log4j2.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<configuration status="debug">
    <properties>
        <!-- 基本的文件的输出信息的配置 -->
        <property name="LOG_HOME">logs</property>
        <!-- 日志备份目录 -->
        <property name="SERVER_NAME">web-font</property>
    </properties>
    <appenders>
        <!-- 定义控制台输出 -->
        <CONSOLE name="CONSOLE" target="SYSTEM_OUT" follow="true">
            <PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss,SSS}] %p [%t] %l - %m%n"/>
        </CONSOLE>
        <!-- 文件日志 -->
        <RollingRandomAccessFile name="DAILY-ROLL-FILE" fileName="${LOG_HOME}/${SERVER_NAME}.log"
                                 filePattern="${LOG_HOME}/${SERVER_NAME}.%d{yyyy-MM-dd-HH}.log">
            <PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss,SSS}] %p [%t] %l - %m%n"/>
            <Policies>
                <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
            </Policies>
        </RollingRandomAccessFile>

    </appenders>
    <loggers>
        <logger name="org.springframework" level="info" additivity="false">
            <appender-ref ref="CONSOLE"/>
            <appender-ref ref="DAILY-ROLL-FILE"/>
        </logger>
        <logger name="org.apache.ibatis" level="debug" additivity="false">
            <appender-ref ref="CONSOLE"/>
            <appender-ref ref="DAILY-ROLL-FILE"/>
        </logger>
        <root level="debug">
            <appender-ref ref="CONSOLE"/>
            <appender-ref ref="DAILY-ROLL-FILE"/>
        </root>
    </loggers>
</configuration>

5、单元测试中使用日志

也可以在单元测试中使用日志,测试其他日志输出功能。这个使用的slf4j+log4j2

import com.springmvc.com.springmvc.service.MessageService;
import com.springmvc.pojo.Message;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import javax.annotation.Resource;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:spring-mybatis1.xml"})
public class TestMybatis {
    private static Logger logger = LoggerFactory.getLogger(TestMybatis.class);
    @Resource
    private MessageService messageService;
    @Test
    public  void test1(){
        Message message = messageService.getMessageById(1);
        logger.info("command:" + message.getCommand());
        logger.info("command:{}", message.getCommand());
    }
}

6、其他问题

如果使用了log4j2,但是没有配置log4j2.xml,不会报错,会使用默认的配置。

ERROR StatusLogger No log4j2 configuration file found. Using default configuration: logging only errors to the console. 

Set system property ‘org.apache.logging.log4j.simplelog.StatusLogger.level‘ to TRACE to show Log4j2 internal initialization logging.

还要看下log4j2比log4j好在哪里?

参考文章:

https://blog.csdn.net/HarderXin/article/details/80422903

log4j+slf4j迁移到log4j2+slf4j (Servlet3.0):

https://blog.csdn.net/cloud_ll/article/details/47134259

原文地址:https://www.cnblogs.com/xingxing0521/p/9418267.html

时间: 2024-12-11 13:23:50

log4j升级log4j2的相关文章

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&l

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

操作: 1.删掉项目中存在的Log4j1.x的jar包,添加log4j2的jar包; 2.添加log4j和log4j2的连接包log4j-1.2-api-2.x.x.jar,注意不是log4j-api-2.x.x.jar; 3.添加log4j2的配置文件log4j2.xml即可,log4j升级log4j2升级成功. 扩展:如果原项目中用的是slf4j打印日志,那么导包的时候需要导入: slf4j-api-1.x.x.jar slf4j-log4j12-1.x.x.jar 原文地址:http://

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

Slf4j与log4j及log4j2的关系及使用方法 slf4j slf4j仅仅是一个为Java程序提供日志输出的统一接口,并不是一个具体的日志实现方案,就比如JDBC一样,只是一种规则而已,所以单独的slf4j是不能工作的,必须搭配其他具体的日志实现方案,比如log4j或者log4j2,要在系统中使用slf4j,我们需要引入的核心包为:slf4j-api-1.6.4.jar. 如果不想每次都写private  final Logger logger = LoggerFactory.getLog

JCL、SLF4J、Log4J、Log4J2、LogBack和JUL之间的关系,你搞清楚了吗?

写在前面 日志组件是我们平时开发过程中必然会用到的组件.在系统中正确的打印日志至少有下面的这些好处: 调试:在程序的开发过程中,必然需要我们不断的调试以达到程序能正确执行的状态 .记录日志可以让开发人员清楚的了解程序的运行状态定位问题: 信息收集:在DT时代,谁掌握了数据谁就掌握了主动权.现在主流的日志系统可以非常方便的记录用户行为数据,格式化成便于进行大数据分析的格式: 记录运行状态:应用程序投产之后,难免会出现生产事故,有了系统日志工程师可以根据日志迅速定位问题. 当然,硬币都具有两面性.引

log4j升级到logback

虽然现在log4j已经基本上不更新很久了,但实际上升级log4j到logback最大的难度并不在于本身的替换,而是现有大量的三方jar依然使用log4j,以至于无法100%的exclude掉,所以很有可能是无法做到纯粹将log4j升级到logback的.在我们的很多系统中,就如此. 如果是使用slf4j作为facade的话,是可以无缝的升级的,但是如果直接使用了Log4j中的类,恐怕就无能为力了. maven依赖: <dependency>              <groupId&g

Log4J1升级Log4J2

近期,碰到需要将项目中的Log4J1升级到Log4J2,现进行下总结.交代下技术背景:web项目,基于Java + Maven 1. 依赖 <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-api</artifactId> <version>2.3</version> <scope>compile</sco

log4j与log4j2

一 log4j log4j是Apache的一个开源项目,用于输出程序的运行状况. 相比于在程序内部添加System.out.println()做日志输出,log4j有如下优点: 可以设定信息输出的目的地,常用的有控制台.文件等. 根据日志的严重程度,将日志分为6级,从高到低依次是:fatal.error.warn.info.debug.trace. 可以设定日志的输出格式,包含动态的信息. 可以开启或者关闭信息输出. 在java代码获取日志对象并输出: Logger logger=Logger.

日志log4j、log4j2

log4j属性文件 ##define an appender named console 日志附加器,设置输出位置 log4j.appender.console=org.apache.log4j.ConsoleAppender #The Target value is System.out or System.err log4j.appender.console.Target=System.out #set the layout type of the apperder log4j.append

log4j+slf4j迁移到log4j2+slf4j (Servlet3.0)

最近对系统中的旧项目实现log升级,选择了log4j2来代替log4j,作为最新一代的log实现,log4j2好在那里可以直接看log4j2性能章节. 这里写写如何从log4j升级到log4j2. 1. maven依赖的变化,对log4j的依赖变成了对log4j2的依赖,在实际使用过程中发现过旧的jboss logging会有问题,使用了3.3.0.Final支持log4j2的版本. <dependency> <groupId>org.apache.logging.log4j<