Log4J的配置文件(Configuration File)就是用来设置记录器的级别、存放器和布局的,它可接key=value格式的设java
Log4J的配置文件(Configuration File)就是用来设置记录器的级别、存放器和布局的,它可接key=value格式的设置或xml格式的设置信息。经过配置,能够建立出Log4J的运行环境。apache
1. 配置文件服务器
Log4J配置文件的基本格式以下:app
log4j.rootLogger = [ level ] , appenderName1 , appenderName2 , …函数
log4j.appender.appenderName = fully.qualified.name.of.appender.class布局
log4j.appender.appenderName.option1 = value1
…命令行
log4j.appender.appenderName.optionN = valueN线程
log4j.appender.appenderName.layout = fully.qualified.name.of.layout.classdebug
log4j.appender.appenderName.layout.option1 = value1调试
…
log4j.appender.appenderName.layout.optionN = valueN
其中 [level] 是日志输出级别,共有5级:
FATAL 0
ERROR 3
WARN 4
INFO 6
DEBUG 7
一共分为五个级别:DEBUG、INFO、WARN、ERROR和FATAL。这五个级别是有顺序的,DEBUG < INFO < WARN < ERROR < FATAL,明白这一点很重要,这里Log4j有一个规则:假设设置了级别为P,若是发生了一个级别Q比P高,则能够启动,不然屏蔽掉。
DEBUG:这个级别最低的东东,通常的来讲,在系统实际运行过程当中,通常都是不输出的。所以这个级别的信息,能够随意的使用,任何以为有利于在调试时更详细的了解系统运行状态的东东,好比变量的值等等,都输出来看看也无妨。
INFO:这个应该用来反馈系统的当前状态给最终用户的,因此,在这里输出的信息,应该对最终用户具备实际意义,也就是最终用户要可以看得明白是什么意思才行。从某种角度上说,Info输出的信息能够看做是软件产品的一部分(就像那些交互界面上的文字同样),因此须要谨慎对待,不可随便。
WARN、ERROR和FATAL:警告、错误、严重错误,这三者应该都在系统运行时检测到了一个不正常的状态,他们之间的区别,要区分还真不是那么简单的事情。我大体是这样区分的:
所谓警告,应该是这个时候进行一些修复性的工做,应该还能够把系统恢复到正常状态中来,系统应该能够继续运行下去。
所谓错误,就是说能够进行一些修复性的工做,但没法肯定系统会正常的工做下去,系统在之后的某个阶段,极可能会由于当前的这个问题,致使一个没法修复的错误(例如宕机),但也可能一直工做到中止也不出现严重问题。
所谓Fatal,那就是至关严重的了,能够确定这种错误已经没法修复,而且若是系统继续运行下去的话,能够确定必然会愈来愈乱。这时候采起的最好的措施不是试图将系统状态恢复到正常,而是尽量地保留系统有效数据并中止运行。也就是说,选择Warn、Error、Fatal中的具体哪个,是根据当前的这个问题对之后可能产生的影响而定的,若是对之后基本没什么影响,则警告之,若是确定是之后要出严重问题的了,则Fatal之,拿不许会怎么样,则Error之
Appender为日志输出目的地,Log4j提供的appender有如下几种
org.apache.log4j.ConsoleAppender(控制台),
org.apache.log4j.FileAppender(文件),
org.apache.log4j.DailyRollingFileAppender(天天产生一个日志文件),
org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件),
org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
Layout:日志输出格式,Log4j提供的layout有如下几种:
org.apache.log4j.HTMLLayout(以HTML表格形式布局),
org.apache.log4j.PatternLayout(能够灵活地指定布局模式),
org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),
org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)
打印参数: Log4J采用相似C语言中的printf函数的打印格式格式化日志信息,以下:
%m 输出代码中指定的消息
%p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL
%r 输出自应用启动到输出该log信息耗费的毫秒数
%c 输出所属的类目,一般就是所在类的全名
%t 输出产生该日志事件的线程名
%n 输出一个回车换行符,Windows平台为“\\r\\n”,Unix平台为“\\n”
%d 输出日志时间点的日期或时间,默认格式为ISO8601,也能够在其后指定格式,好比:%d{yyy MMM dd HH:mm:ss , SSS},输出相似:2022年10月01日 22 : 10 : 28 , 921
%l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(TestLog4.java: 10 )
2. 在代码中初始化Logger:
1) 在程序中调用BasicConfigurator.configure()方法:给根记录器增长一个ConsoleAppender,输出格式经过PatternLayout设为%-4r [%t] %-5p %c %x - %m%n,还有根记录器的默认级别是Level.DEBUG.
2)配置放在文件里,经过命令行参数传递文件名字,经过PropertyConfigurator.configure(args[x])解析并配置;
3)配置放在文件里,经过环境变量传递文件名等信息,利用log4j默认的初始化过程解析并配置;
4)配置放在文件里,经过应用服务器配置传递文件名等信息,利用一个特殊的servlet来完成配置
3. 为不一样的 Appender 设置日志输出级别:
当调试系统时,咱们每每注意的只是异常级别的日志输出,可是一般全部级别的输出都是放在一个文件里的,若是日志输出的级别是BUG!?那就慢慢去找吧。
这时咱们也许会想要是能把异常信息单独输出到一个文件里该多好啊。固然能够,Log4j已经提供了这样的功能,咱们只须要在配置中修改Appender的Threshold 就能实现,好比下面的例子:
[配置文件]
### set log levels ###
log4j.rootLogger = debug , stdout , D , E
### 输出到控制台 ###
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = %d{ABSOLUTE} %5p %c{ 1 }:%L - %m%n、
## 输出到日志文件 ###
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = logs/log.log
log4j.appender.D.Append = true
log4j.appender.D.Threshold = DEBUG ## 输出DEBUG级别以上的日志
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
### 保存异常信息到单独文件 ### log4j.appender.D = org.apache.log4j.DailyRollingFileAppender log4j.appender.D.File = logs/error.log ## 异常日志文件名 log4j.appender.D.Append = true log4j.appender.D.Threshold = ERROR ## 只输出ERROR级别以上的日志!!! log4j.appender.D.layout = org.apache.log4j.PatternLayout log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n