使用 log4j 2记录日志

log4j2使用方法还是很简单的

1 需要使用的jar包有两个,

1)log4j-api-2.8.2.jar

2)log4j-core-2.8.2.jar

2 产生Logger 对象非常的简单,使用 LogManager.getLogger(name) 方法可以获取指定名称的 logger对象。其中 name 是在配置文件中的 logger。配置文件可以是多种的一般使用properties文件或者xml文件,配置文件放在classpath 指定的目录中,因为该组件默认回去classpath路径中查找 log4j2.xml文件或log4j2.properties或log4j2.jsn等。详情请查看官网

我们放到src/目录下即可。

3 配置文件,主要就是配置Loggers 和Appenders。Logger就是配置logger对象, Appender就是说明在哪输出信息。简单例子如下

<?xml version="1.0" encoding="UTF-8"?>  
<Configuration status="warn" monitorInterval="600">
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d [%t] %-5level %logger{36} %msg%n" />  
        </Console>
        <RollingFile name="RollingFile" fileName="logs/mylog.log" filePattern="logs/$${date:yyyy-MM}/mylog-%d{MM-dd-HH-mm}-%i.log.gz">
          <PatternLayout>
            <Pattern>%d %-5level %c{1.} [%t] %m%n</Pattern>
          </PatternLayout>
          <Policies>
            <TimeBasedTriggeringPolicy interval="1"/>
            <SizeBasedTriggeringPolicy size="250 MB"/>
          </Policies>
        </RollingFile>
    </Appenders>
    <Loggers>
        <Root level="error">
            <AppenderRef ref="Console" />
        </Root>
        <Logger name="mylog" level="warn" additivity="false">
            <AppenderRef ref="RollingFile"/>
        </Logger>
    </Loggers>
</Configuration> 

关键字说明,详细说明请查看官网

1)monitorInterval:会自动加载配置文件的时间间隔,单位是秒

PatternLayout 中的格式说明

2)%d:输出日期,默认格式,例如:2012-11-02 14:34:02,781

3)%t: 输出当前线程名称

4)%-5level 输出日志级别,-5表示左对齐并且固定输出5个字符

5)%logger 或 %c  输出logger名称,因为Root Logger没有名称,所以没有输出

6)%msg 日志文本

7)%n 换行

在设置日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果设置为WARN,则低于WARN的信息都不会输出。对于Loggers中level的定义同样适用。

简单代码如下:

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

import org.junit.Test;

public class MyLogger {
    private Logger myLogger = LogManager.getLogger("mylog");
    
    @Test
    public void fun1(){
        for(int i=0;i<10;i++){
            myLogger.trace("trace message");
            myLogger.info("info message");
            myLogger.debug("debug message");
            myLogger.warn("warn message");
            myLogger.error("error message");
            myLogger.fatal("fatal message");
            
            try {
                Thread.sleep(1000*30);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                myLogger.error(e);
            }
        
        }
        
    }
    
    public static void main(String[] args) {
        new MyLogger().fun1();
    }

}
原文地址:https://www.cnblogs.com/zhaopengcheng/p/6694248.html