Log4j2架构及概念简介

log4j——Log for java。

此文为读log4j2 user guaid时的翻译及笔记。log4j2与log4j在Logger的继承关系和配置方式上都做出了修改。个人感觉比较有意思的是Logger对象与LoggerConfig解耦的设计,以及Filter中的传递机制,有点像网络包分发,不过多了很多可调控性。

前言

log4j2可以按照开发人员预先的设定,在指定的位置和情况下打印log语句,并且可以酌情关闭某些log语句,如开发阶段debug类型的语句等。并且,可以使用layout来定义输出语句的格式,像C语言的printf函数一样。如:

要实现这样标准化的日志输出,只需要在工程中引入log4j2的相关jar包,并向LogManager对象申请一个Logger对象的引用,然后调用该对象的相应方法即可,如:

在log4j2中,一共有五种log level,分别为

Log4j2类图

通过类图可用看到:

每一个log上下文对应一个configuration,configuration中详细描述了log系统的各个LoggerConfig、Appender(输出目的地)、EventLog过滤器等。每一个Logger又与一个LoggerConfig相关联。另外,可以看到Filter的种类很多,有聚合在Configuration中的filter、有聚合在LoggerConfig中的filter也有聚合在Appender中的filter。不同的filter在过滤LogEvent时的行为和判断依据是不同的,具体可参加本文后面给出的文档。

应用程序通过调用的名称与一个Logger的名称可以完全匹配时,Logger将会选择这个用来决定一个log request将被打印到那个目的地中,可选的打印目的地很多,香港虚拟主机,如console、文件、远程socket server等。。

Log4j中各个概念的简要介绍

Logger间的层次关系

相比于纯粹的

Logger

rootLoggerConfig

Loggerlogger=LogManager.getLogger(LogManager.ROOT_LOGGER_NAME);

其他的

LoggerContext

LoggerContext

Configuration

每一个

Logger

如前面所述,

获得Logger:

使用相同的名称参数来调用

Loggerx=Logger.getLogger(“wombat”);

Loggery=Logger.getLogger(“wombat”);

x

log4j环境的配置是在应用的启动阶段完成的。优先进行的方式是通过读取配置文件来完成。

log4j

LoggerConfig

Log层次:

每一个INFO,WARN,ERROR

例子一:

可用看到,应用中的

例子二:

在例子二中可以看到,有

例子三:

可以看到

例子四:

可以看到,现在应用中有两个配置好的

例子五

可以看到,现在应用中有三个配置好的

Filter

与防火墙过滤的规则相似,

Appender

可以调用当前PS)。

在某一个LoggerConfig的父级的Appenders上。

这样会产生一连串的遗传效应。例如,对LoggerConfigBAppenderLoggerConfigA

如果想避免这种遗传效应的话,可以在configuration文件中做如下设置:

additivity=”false”

这样,就可以关闭Appender的遗传效应了。具体解释见:

Layout

通常,用户不止希望能定义

176[main]INFOorg.foo.Bar-Locatednearestgasstation.

其中,香港空间,各个字段的含义分别是:

%r指的是程序运行至输出这句话所经过的时间(以毫秒为单位);

%t

%c

%m

%n为换行符。

Reference

《log4j user guide》

,香港空间接受失败等于放松自己高压的心理,

Log4j2架构及概念简介

相关文章:

你感兴趣的文章:

标签云: