日志是程序猿的眼睛,好的日志输出能帮助我们快速的解决问题,那我们就要知道日志是怎么配置的,下面是从对8个日志级别的介绍,和如何在项目上配置都详细的说明了,了解日志的小伙版们可以做为参考,看到这篇文章,那就是缘分,感谢有你,希望你前程似锦。
log4j定义了8个级别的log(除去OFF和ALL,可以说分为6个级别),优先级从高到低依次为:OFF、FATAL、ERROR、WARN、INFO、DEBUG、TRACE、 ALL。
ALL: 最低等级的,用于打开所有日志记录。
TRACE: designates finer-grained informational events than the DEBUG.Since:1.2.12,很低的日志级别,一般不会使用。
DEBUG: 指出细粒度信息事件对调试应用程序是非常有帮助的,主要用于开发过程中打印一些运行信息。
INFO: 消息在粗粒度级别上突出强调应用程序的运行过程。打印一些你感兴趣的或者重要的信息,这个可以用于生产环境中输出程序运行的一些重要信息,但是不能滥用,避免打印过多的日志。
WARN: 表明会出现潜在错误的情形,有些信息不是错误信息,但是也要给程序员的一些提示。
ERROR: 指出虽然发生错误事件,但仍然不影响系统的继续运行。打印错误和异常信息,如果不想输出太多的日志,可以使用这个级别。
FATAL: 指出每个严重的错误事件将会导致应用程序的退出。这个级别比较高了。重大错误,这种级别你可以直接停止程序了。
OFF: 最高等级的,用于关闭所有日志记录。
如果将log level设置在某一个级别上,那么比此级别优先级高的log都能打印出来。例如,如果设置优先级为WARN,那么OFF、FATAL、ERROR、WARN 4个级别的log能正常输出,而INFO、DEBUG、TRACE、 ALL级别的log则会被忽略。Log4j建议只使用四个级别,优先级从高到低分别是ERROR、WARN、INFO、DEBUG。
从我们实验的结果可以看出,log4j默认的优先级为ERROR或者WARN(实际上是ERROR)。
一,配置控制台日志输出
#该定义让日志在控制台和文件输出,并且只输出info级别以上的日志
log4j.rootLogger=info,console,myFile
#控制台日志的实现类是ConsoleAppender(控制台输出源)
log4j.appender.console=org.apache.log4j.ConsoleAppender
#指定控制台日志输出格式的格式转换器为PatternLayout实现类
log4j.appender.console.layout=org.apache.log4j.PatternLayout
#定义控制台日志输出的具体格式
log4j.appender.console.layout.ConversionPattern=%d %-5p [%c.%M()] - %m%n
二,配置文件日志的输处
#日志文件的实现类是RollingFileAppender(文件输出源)
log4j.appender.myFile=org.apache.log4j.RollingFileAppender
#定义日志文件的存储路径
log4j.appender.myFile.File=src/log/logProperties/log4j.log
#定义日志文件的大小
log4j.appender.myFile.MaxFileSize=1024kb
#定义日志文件最多生成几个(从0开始算1个,即此处最多3个文件)
#超过该大小则会覆盖前面生成的文件
log4j.appender.myFile.MaxBackupIndex=2
#指定日志文件输出格式的格式转换器为PatternLayout实现类
log4j.appender.myFile.layout=org.apache.log4j.PatternLayout
#定义日志文件输出的具体格式
log4j.appender.console.layout.ConversionPattern=%d %-5p [%c.%M()] - %m%n
#%d: 日志打印的时间点,默认格式为ISO8601,也可以另外指定格式,
#定义如下: %d{yyy年MM月dd日 HH时mm分ss秒SSS},则会输出:
#2018年01月06日 14时47分45秒590
#%p: 输出日志级别,即DEBUG,INFO,WARN,ERROR,FATAL
#%-5p:表示字符小于5位,则字符居左(不加“-”号则字符居右),你可以举一反三
#%c: 日志所在类的全名
#%M: 日志所在方法的名字
#%m: 日志信息
#%n: 输出一个回车换行符
#%L: 输出代码中的行号
日志级别配置可分为3类,一类是配置父类日志记录器的日志级别,第二类是配置子类日志记录器的日志级别,第三类是配置输出源(控制台、文件等)的日志级别。他们的日志级别解析优先级由低到高排列。
解释:
输出源如果没有定义日志级别,它会继承最接近它的子类日志记录器的日志级别;子类日志记录器没有定义日志级别,它会继承最接近它的父类日志记录器。
打印日志时输出源会根据自身定义的日志级别与最接近它的子类日志记录器定义的日志级别比较,如果输出源定义的级别高于子类日志记录器,则按输出源定义的日志级别输出日志,反之则按子类日志记录器的日志级别输出。
先介绍一下各个配置都是做什么的,以及配上例子以便能更好的理解
把日志添加到控制台,有以下子节点:
%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
System.err
把日志添加到文件,有以下子节点:
limeFileLogger.log
true
%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
false
滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件
1,
2,
3,
4,
TimeBasedRollingPolicy: 最常用的滚动策略,它根据时间来制定滚动策略,既负责滚动也负责出发滚动。有以下子节点:
(1),
(2),
5,
SizeBasedTriggeringPolicy: 查看当前活动文件的大小,如果超过指定大小会告知RollingFileAppender 触发当前活动文件滚动。只有一个节点:
例如:每天生成一个日志文件,保存30天的日志文件
D:/log/fileInfolog%d.log
30
%d - %msg%n
例如:当文件大于20MB时生成新的日志文件
20MB
%d - %msg%n
过滤器,执行一个过滤器会有返回个枚举值,即DENY,NEUTRAL,ACCEPT其中之一。返回DENY,日志将立即被抛弃不再经过其他过滤器;返回NEUTRAL,有序列表里的下个过滤器过接着处理日志;返回ACCEPT,日志会被立即处理,不再经过剩余过滤器。
过滤器被添加到
级别过滤器,根据日志级别进行过滤。如果日志级别等于配置级别,过滤器会根据onMath 和 onMismatch接收或拒绝日志。有以下子节点:
ERROR
DENY
ACCEPT
%d - %msg%n
D:/log/fileInfolog%d.log
30
ThresholdFilter:临界值过滤器,过滤掉低于指定临界值的日志。当日志级别等于或高于临界值时,过滤器返回NEUTRAL;当日志级别低于临界值时,日志会被拒绝。
ERROR
%d - %msg%n
D:/log/fileErrorlog%d.log
求值过滤器,评估、鉴别日志是否符合指定条件。有一下子节点:
鉴别器,常用的鉴别器是JaninoEventEvaluato,也是默认的鉴别器,它以任意的java布尔值表达式作为求值条件,求值条件在配置文件解释过成功被动态编译,布尔值表达式返回true就表示符合过滤条件。evaluator有个子标签
< onMatch>:用于配置符合过滤条件的操作
负责两件事,一是把日志信息转换成字节数组,二是把字节数组写入到输出流。
目前PatternLayoutEncoder 是唯一有用的且默认的encoder ,有一个
用来设置某一个包或者具体的某一个类的日志打印级别,有以下子节点:
name:用来指定受此loger约束的某一个包或者具体的某一个类。
addtivity:是否向上级loger传递打印信息。默认是true。
输出日志级别
设置root的日志级别为info,指定所有
如下:
%d- %msg%n
ERROR
DENY
ACCEPT
%d - %msg%n
D:/log/fileInfolog%d.log
return message.contains("billing");
ACCEPT
DENY
%-4relative [%thread] %-5level %logger - %msg%n
limeFileLogger.log
true
%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
false
ERROR
%d - %msg%n
D:/log/fileErrorlog%d.log