1.其实已经有很多的log4j的文章,但是为了自己以后用起来方便,还是自己写一个吧
2.Log4j是一个很流行的Java日志记录工具,提供了很多日志打印的特性,常用的配置包括:logger、appender和layout,即日志对象、输出位置、输出样式;
3.Log4j的日志级别分为7个等级:ALL、DEBUG、INFO、WARN、ERROR、FATAL、OFF,从左到右等级由低到高,分等级是为了设置日志输出的门槛,只有等级等于或高于这个门槛的日志才有机会输出;
日志实例,就是代码里实例化的Logger对象,格式如下,LEVEL用来设定日志等级,appenderName定义日志输出器:
1 2 |
|
下面的例子中给出了4种不同的Logger打印日志的appender:
1 2 |
|
a)日志输出器,指定logger的输出位置
1 |
|
appender有5种选择
1 2 3 4 5 |
|
b)每种appender都有若干配置项,下面逐一介绍
Threshold
=
WARN:指定日志信息的最低输出级别,默认DEBUG
ImmediateFlush
=
true:表示所有消息都会被立即输出,设为false则不输出,默认值是true
Append=false:true表示消息增加到指定文件中,false则将消息覆盖指定的文件内容,默认true
File
=
D:
/
logs
/
logging.log4j:指定消息输出到logging.log4j文件
log4j.appender.xxx.layout=
org.apache.log4j.PatternLayout
log4j.appender.xxx.layout.ConversionPattern=
%
d{yyyy
-
MM
-
dd HH:mm:ss} [
%
p]
%
m
%
n
a)几种常见的模式
org.apache.log4j.HTMLLayout(以HTML表格形式布局)
org.apache.log4j.PatternLayout(可以灵活地指定布局模式)
org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串)
org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)
b)参数的含义
%m 输出代码中指定的消息;%p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL;
%r 输出自应用启动到输出该log信息耗费的毫秒数 ;%c 输出所属的类目,通常就是所在类的全名;
%t 输出产生该日志事件的线程名;%n 输出一个回车换行符,Windows平台为“rn”,Unix平台为“n”;
%d 输出日志时间点的日期或时间;%l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(TestLog4.java:10) 作者:杜琪 链接:https://www.jianshu.com/p/c6c543e4975e 來源:简书 简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
这种配置方式可用于logback和log4j,也是通过配置logger、appender、pattern来进行配置的,比如下面的例子中,定义了3个logger:console、普通按天分块日志、供logstash使用的日志,还定义了pattern
##继承logback的默认配置
##日志路径和名称
##日志打印格式
##控制台的日志打印
DEBUG
${CONSOLE_LOG_PATTERN}
utf8
##普通的日志文件,并且以天为单位切割日志文件
${LOG_FILE}
${LOG_FILE}.%d{yyyy-MM-dd}.gz
7
${CONSOLE_LOG_PATTERN}
utf8
##供logstash使用的日志文件,并且以天为单位切割日志文件
${LOG_FILE}.json
${LOG_FILE}.json.%d{yyyy-MM-dd}.gz
7
UTC
{
"severity": "%level",
"service": "${springAppName:-}",
"trace": "%X{X-B3-TraceId:-}",
"span": "%X{X-B3-SpanId:-}",
"parent": "%X{X-B3-ParentSpanId:-}",
"exportable": "%X{X-Span-Export:-}",
"pid": "${PID:-}",
"thread": "%thread",
"class": "%logger{40}",
"rest": "%message"
}