相关maven
org.apache.logging.log4j
log4j-api
2.8.1
compile
org.apache.logging.log4j
log4j-core
2.8.1
runtime
org.apache.logging.log4j
log4j-jcl
2.8.1
runtime
org.apache.logging.log4j
log4j-slf4j-impl
2.8.1
runtime
org.apache.logging.log4j
log4j-taglib
2.8.1
runtime
配置文件位置
缺省位置
缺省是在console中显示error级别。配置文件依次寻找为
log4j.configurationFile
log4j2-test.json 或 log4j2-test.jsn
log4j2-test.xml
log4j2.json 或 log4j2.jsn
log4j2.xml
可以在代码中指定位置
开发中缺省位置如下,war包将存放在classpath中。
指定配置文件
private static Logger logger = null;
/**
* 指定log4j2的配置文件
* 参考:http://logging.apache.org/log4j/2.x/log4j-core/apidocs/index.html
*
* @param file 配置文件名字,建议绝对路径的方式
* @throws FileNotFoundException 异常
* @throws IOException 异常
*/
public static void initLogger(String file) throws FileNotFoundException,IOException{
ConfigurationSource source = new ConfigurationSource(new FileInputStream(file),new File(file));
Configurator.initialize(null, source);
//【注意】必须要初始化之后,才设置logger的值,否则会出错。
logger = LogManager.getLogger();
}
编写配置文件
一个简单的配置文件 我们先从一个极为简单的配置文件开始
appender 在appenders中可以定义多个appender,在实际应用中,我们希望将log记录在文件中,以便事后调阅,相关的appender如下:
/usr/local/log
mytest
... 其他 appender ...
......
PatternLayout的pattern
这里定义输出log的样式
说明
样式
例子
%d 时间戳
%d{HH:mm:ss.SSS}
%d{yyyy-MM-dd HH:mm:ss.SSS}
%d{DEFAULT}
%d{ISO8601}
%d{UNIX}
%d{UNIX_MILLIS}
16:20:22.257
2017-04-18 16:20:22.257
2017-04-18 16:20:22,257
2017-04-18T16:20:22,257
1492503622
1492503622257
%t 线程名字
[%t]
[localhost-startStop-1]
我们可以利用线程名字,将请求和响应对应起来
%logger,%c:类名
%c
%c{2}
%c{1}
%c{2.}
%c{1.}
cn.wei.flowingflying.chapter10.tictactoe.GlobalListener 全部信息
tictactoe.GlobalListener 显示最后2个
GlobalListener 显示最后1个
cn.we.fl.ch.ti.GlobalListener 缩写2个字母
c.w.f.c.t.GlobalListener 缩写1个字母
%l
cn.wei.flowingflying.chapter10.tictactoe.GlobalListener.contextInitialized(GlobalListener.java:58)
方法名
%M
contextInitialized
文件名字
%F
GlobalListener.java
所在的行号
%L
58
消息
%m %msg %message
换行
%n
日志级别
%level
%X
%X{id}
%X{username}
显示ThreadContext中map里面的信息,在后面详细说明
Loggers 在loggers中定义一个或多个logger,代码中的logger实例将匹配其中某个。
......
Filter 在前面已经提供了fiter的例子
除了在logger外,在Appender也可以定义filter,在configuration下面可以定义context-wide的filter。