【Java】log4j2教程

重点

了解log4j2的工作过程和涉及的主要组件
主要配置文件log4j2.xml

工作过程和主要组件

【Java】log4j2教程_第1张图片
类图

工作过程:log4j2将一次信息的输出定义为一个LogEvent, 这个事件像流水一样具有源头、流经的管道以及终点。

  • 源头对应的就是源代码中的log.info(), log.error()等调用;
  • 管道就是Filter,经过这些Filter时,有的LogEvent会被过滤掉,过滤规则是自定义的,比如可以过滤掉某些包含特殊字符的信息,当然,过滤还由level共同参与决定。
  • 终点就是各个Appender, 典型的Appender比如控制台(System.out), 文件等

level: log4j2的输出api包括: trace,debug,info,warn,error,fatal 分别对应的是事件的级别:TRACE DEBUG INFO WARN ERROR FATAL
过滤规则是:某个级别的logger只接受某个级别及其以后事件的输出, 比如一个logger的级别为INFO, 则调用logger.debug(), logger.trace()均不能产生输出,而logger.info(),logger.warn(),logger.error(),logger.fatal()均可。

类图的解读:
1.此图应当从Configuration开始看
2.Configuration对应一个配置文件,比如log4j2.xml; 这个文件中配置多个LoogerConfig, Appender,Filter,StrSubstitutor
3.LoggerConfig包含对Logger的配置说明,以及多个Filter的引用
4.Filter对信息进行过滤
5.Appender配置信息接收器
6.Layout决定了信息的输出格式, 比如logger.info("A Message""), 其输出通常是:
2017-09-30 10:28:23.175 [main] INFO fulton.util.java_pc.process.StartIntellijIDE - A Message
除了信息本身以外还包括其他的上下文信息,这就是有Layout配置的

配置文件log4j2.xml

模板:

【Java】log4j2教程_第2张图片
配置参考

配置和类图的说明是对应的,一个Configuration对应多个Appender, 多个Logger。

Logger的名称、继承体系和获取方式

首先必须了解Logger的命名和层次关系。Logger是有继承关系的,就像Java中的类体系一样,Object是所有的类的超类;同理,在Logger中也存在一个RootLogger,它是所有Logger的父类。Logger之间的继承是通过对名称的设置来隐式实现的,比如一个名为 "com.a"的logger就是"com.a.b"的父logger, 而"com.a"的父Logger就是RootLogger。每个Logger都具有名称,它们在配置文件中的Loggers部分,通过Logger标签的name属性配置,比如:

 
     
  

为了使用Logger,必须从LogManager根据name来获取一个Logger。LogManager提供如下方法:

  • getRootLogger()
  • getLogger(name)
    当获取一个name没有配置在配置文件中的Logger时,默认创建一个Logger,并继承RootLogger的所有属性; 而RootLogger是可以在配置文件中进行配置的。
    一个通常的做法是,每个类使用一个logger,名称就是类的完整名称(包括包名)。为此,LogManager还提供了一个简便方法:getLogger(Class)。这样得到的Logger名称就是当前的类名。

Logger的使用方法

假设版本号为2.9.1

  • 引入jar包:log4j-core-2.9.1.jar log4j-api-2.9.1.jar
  • 在src目录下新建log4j2.xml文件,输入配置内容
  • 对于需要输出信息的类,使用下面的模板:
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

public class MyClass{
    public static final Logger logger = LogManager.getLogger(MyClass.class);
        public void myMethod()
        {
          logger.info("calling me....");
        }
        ....
}

参考

https://logging.apache.org/log4j/2.0/manual/index.html Apache官方参考文档

你可能感兴趣的:(【Java】log4j2教程)