Log4j2 快速使用

Log4j2 快速使用


log4j 2.x 版本提供了更多的功能和更加简便的使用方式,和1.X版本相比使用过程有些不同,其中比较大的改动是取消了 log4j.propelog配置文件,使用 xml,json,jsn 格式作为配置文件,同时修改了部分对象的调用过程,如 Logger 对象等,以下是Log4j2 的快速使用过程:

在官方下载log4j 2,下载地址:https://logging.apache.org/log4j/2.x/download.html
将以下的 jar 包导入到项目依赖 lib 中:
1
log4j-core-xx.jar
2
log4j-api-xx.jar
也可以通过 在 Maven 项目的 pom.xml 引入:
1
    <dependencies>  
2
        <dependency>  
3
            <groupId>org.apache.logging.log4j</groupId>  
4
            <artifactId>log4j-api</artifactId>  
5
            <version>2.x</version>  
6
        </dependency>  
7
        <dependency>  
8
            <groupId>org.apache.logging.log4j</groupId>  
9
            <artifactId>log4j-core</artifactId>  
10
            <version>2.x</version>  
11
        </dependency>  
12
    </dependencies>  

之后在项目工程的 src 目录下创建一个 log4j2.xml ,里面写入:
1
    <?xml version="1.0" encoding="UTF-8"?>  
2
    <Configuration status="WARN">  
3
        <Appenders>  
4
            <Console name="Console" target="SYSTEM_OUT">  
5
                <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />  
6
            </Console>  
7
        </Appenders>  
8
        <Loggers>  
9
            <Root level="debug">  
10
                <AppenderRef ref="Console" />  
11
            </Root>  
12
        </Loggers>  
13
    </Configuration>  
之后在工程里就可以使用 log4j 记录日志了,以下是简单的测试代码:
1
import org.apache.logging.log4j.LogManager;
2
import org.apache.logging.log4j.Logger;
3
4
public class TestLog4j {
5
    private static final Logger log = LogManager.getLogger();
6
    public static void main(String[] args){
7
        log.debug("test debug message");     //Logger的各种记录方法;
8
        log.info("test info message");
9
        log.warn("test warn message")
10
        log.error("test error message");
11
        log.fatal("test fatal message");
12
    }
13
}
以上代码在控制台输出
1
20:35:28.179 [main] DEBUG demo.TestLog4j - test debug message
2
20:35:28.181 [main] INFO  demo.TestLog4j - test info message
3
20:35:28.181 [main] WARN  demo.TestLog4j - test warn message
4
20:35:28.181 [main] ERROR demo.TestLog4j - test error message
5
20:35:28.181 [main] FATAL demo.TestLog4j - test fatal message

以上就是 Log4j2 的快速使用过程,以下说明各个部分的使用细节;



日志记录的级别

log4j 的日志记录级别由低到高如下表:
trace栈追踪级别,细粒度最低的级别,一般很少使用;
debug
调试级别,在调试过程中很最经常使用,一般在工程中会以debug最为最低级别,主要用于代替Eclipse和IDEA的debug功能,用于输出调试信息;
info用于输出程序运行中重要或感兴趣的信息,在生产环境中最经常使用;
warn指定潜在的警告信息,类似于java中的@warn注解
error指定错误信息,但仍然允许程序继续运行,常用在记录catch捕获到的异常信息;
fatal指定重大错误信息,这种等级的错误可能会导致程序中止;
off最高等级,这个参数只是为了关闭日志记录
这些级别的等级排布:trace<debug<info<warn<error<fatal;
这些级别之间的包含的关系,比如将日志级别设置为 debug,那么大于等于这个级别的日志都会输出,即输出 debug,info,warn,error,fatal 等级的日志;



配置文件说明

一般会把配置文件命名为 log4j2.xml ,同时放置在项目src的目录下,关于log4j2调用配置文件的顺序,可以参考官方说明:
一个典型的配置文件如下:
1
    <?xml version="1.0" encoding="UTF-8"?>  
2
    <Configuration status="WARN">  
3
        <Appenders>  
4
            <Console name="myConsole" target="SYSTEM_OUT">  
5
                <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />  
6
            </Console>  
7
        </Appenders>  
8
        <Loggers>  
9
            <Root level="debug">  
10
                <AppenderRef ref="myConsole" />  
11
            </Root>  
12
        </Loggers>  
13
    </Configuration>  
这里补充Log4j的3个主要的对象介绍:
  • Logger:  负责捕获记录信息;

  • Appender :  负责发布日志信息,同时决定日志的发送目的地;

  • Layouter:  负责格式化不同风格的日志信息。


<Configuration>
log4j2.xml 的根节点,内部包含<Appends>,<Loggers>等多种节点;
status属性指定默认的优先级(即在内部logger没有指定优先级的情况下,为其指定的优先级);
可以添加一个 monitorInterval 指定每隔多少秒重新读取配置文件,可以在不重启的情况下读取该配置文件;

<Appenders>
定义各种 Appender 输出器,包含各个appender,有各种种类的appender标签,其中有2种比较常用的标签:<Console>,<File>,分别代表控制台输出、文件输出;

<Console>
控制台输出类型appender,其中 name属性为该appender的标识名,traget指定输出目的地;

<PatternLayout>
用于appender输出的格式化,pattern属性为一个输出格式的字符串;
%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n  中的含义如下:
%d{HH:mm:ss.SSS} 表示输出到毫秒的时间
%t 输出当前线程名称
%-5level 输出日志级别,-5表示左对齐并且固定输出5个字符 
%logger 输出logger名称,如果Logger没有名称,则不输出
%msg 输出日志文本
%n 换行
%F 输出所在的类文件名,如Client.java
%L 输出行号
%M 输出所在方法名
输出以下格式的文本:
1
20:35:28.181 [main] INFO  demo.TestLog4j - test info message
以下是一个在debug常用的格式字符串,用于输出debug的详细信息:
"%d{yyyy.MM.dd HH:mm:ss.SSS} [%t] %-5level %logger{36} %F:%M(line:%L) - %msg%n"
输出格式如下:
1
2017.07.27 14:30:21.889 [main] DEBUG demo.TestLog4j TestLog4j.java:main(line:17) - test debug message

<Loggers>
定义各种loggers,包含<Root>和<Logger>2种标签,其中<Root>为根logger,即在代码中 LogManager.getlogger() 没有指定参数的情况下委派的默认logger,这些logger会包含一个<AppenderRef >用于指定该 logger 的 appender,在其 ref 属性表示该 append的 name 标识;



指定Logger

在代码 Logger logger = LogManager.getLogger() 中,如果不指定Logger name,那么lg4j会直接调用<Root>的Logger,在使用  %logger 会输出所调用类的class名,如以上示例例子会输出“demo.Log4jTest”,如果要指定一个 Logger 来处理该日志收集,可以如下设置:
代码中:
1
private static final Logger log = LogManager.getLogger("mylogger");
2
public static void main(String[] args){
3
        log.debug("test debug message");     
4
        log.info("test info message");
5
        log.warn("test warn message")
6
        log.error("test error message");
7
        log.fatal("test fatal message");
8
}
log4j2.xml中:
1
  <Configuration status="WARN" monitorInterval="300">  
2
        <Appenders>  
3
            <Console name="myConsole" target="SYSTEM_OUT">  
4
                <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />  
5
            </Console>  
6
        </Appenders>  
7
        <Loggers>  
8
             <Logger name="mylogger" level="debug"  additivity="false">
9
                  <AppenderRef ref="myConsole" />  
10
            </Logger>
11
            <Root level="debug">  
12
                <AppenderRef ref="myConsole" />  
13
            </Root> 
14
        </Loggers>  
15
    </Configuration>  
<Logger> 中 additivity="false" 表示在该logger中输出的日志不会再延伸到父层 logger,这里如果改为true,则会延伸到Root Logger,即Root Logger的配置也会输出一次。 

指定Appender

通过Appender可以指定输出的目的地和格式,常用的有输出到控制台和文件,即<Console><File>,
以下示例者两种输出形式;
1
    <Configuration status="WARN" monitorInterval="300">  
2
        <Appenders>  
3
            <Console name="Console" target="SYSTEM_OUT">  
4
                <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />  
5
            </Console>  
6
            <File name="myfile" fileName="D:/logs/app.log">  
7
                <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />  
8
            </File>  
9
        </Appenders>  
10
        <Loggers>  
11
            <Logger name="mylog" level="debug" additivity="false">  
12
                <AppenderRef ref="myfile" />  
13
            </Logger>  
14
            <Root level="error">  
15
                <AppenderRef ref="Console" />  
16
            </Root>  
17
        </Loggers>  
18
    </Configuration>  


更多关于 Log4j2 的用法和概念参见官方的说明文档:https://logging.apache.org/log4j/2.x/index.html
本文也是参考该官方文档总结的;








  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值