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》
,香港空间接受失败等于放松自己高压的心理,