在开发中我们需要调试主要依赖debug模式,但是在寻找bug问题的时候更多是依赖于log,一个强大的log配置将会给我们带来更多便捷,所以说在一个系统中配置一个log文件是必要的,今天我们了解一下Log4j.properties的参数。后面我们将结合各种框架,以及各种需要配置属于自己的,具有特色的日志;
定义日志配置:就是对Logger,Appender及Layout的分别使用。Log4j支持两种配置文件格式:一种是XML格式文件,一种是java properties(key=value)格式文件:今天我们先来看properties格式:
根据不同的日志系统,我们先了解一下那些规则配置才会被正确加载
Logback: logback-spring.xml, logback-spring.groovy, logback.xml, logback.groovy
Log4j: log4j-spring.properties, log4j-spring.xml, log4j.properties, log4j.xml
Log4j2: log4j2-spring.xml, log4j2.xml
JDK (Java Util Logging): logging.properties
先来看一个最简单的日志配置:
log4j.rootLogger = debug,stdout
### 输出信息到控制擡 ###
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 = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n
由上面我们可以看到配置日志有三个重要组成:接下来我们将走进log4j:
一、Log4j使用:
日志三要素:
1、日志信息的优先级
2、日志信息的输出目的地
3、日志信息输出格式
1>、配置根Logger (日志信息的优先级)
log4j.rootLogger=[ level ] , appenderName1,appenderName2 , ...
level:是日志记录的优先级,分为OFF, FATAL, ERROE, WARN, INFO, DEBUG, ALL以及自定义的日志;通过控制输出级别,可以控制应用程序中相应级别的日志信息开关。
A: off 最高等级,用于关闭所有日志记录。
B: fatal 指出每个严重的错误事件,将会导致应用程序的退出。
C: error 指出虽然发生错误事件,但任然不影响系统的继续运行。
D: warn 表明会出现潜在的错误情形。
E: info 一般和在粗颗粒度级别上,强调应用程序的运行全程。
F: debug 一般用于细颗粒级别上,对调试应用程序非常有帮助。
G: all 最低等级,用于打开所有日志记录。
这些级别是定义在org.apache.log4j.Level类中:log4j只建议使用4个级别,分别是:error warn info debug;
appenderName:日志输出地方,可以指定多个输出目标;
2>、日志信息输出目的地
log4j.appender.appenderName=class
class可以使用下面五个目的地中任意一个:
A. org.apache.log4j.ConsoleAppender #控制台
B. org.apache.log4j.FileAppender #文件
C. org.apache.log4j.DailyRollingFileAppender #每天产生一个日志文件
D. org.apache.log4j.RollingFileAppender #文件大小到达指定尺寸的时候产生一个新的文件
E. org.apache.log4j.WriterAppender #将日志信息以流格式发送到指定的地方
接下来我们分别来理解一下这五个目的选项:
A. ConsoleAppender
Threshold =warn指定日志消息的输出最低层次。
ImmediateFlush=true 默认值是true,所有消息会被立即输出。
Target=System.err 默认是System.out 指定输出控制台
B. FileAppender
Threshold=WARN:指定日志消息的输出最低层次。
ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。
File=mylog.txt:指定消息输出到mylog.txt文件。
Append=false:默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容。
C. DailyRollingFileAppender
Threshold=WARN:指定日志消息的输出最低层次。
ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。
File=mylog.txt:指定消息输出到mylog.txt文件。
Append=false:默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容。
DatePattern=''.''yyyy-ww:每周滚动一次文件,即每周产生一个新的文件。当然也可以指定按月、周、天、时和分。即对应的格式如下:
1)''.''yyyy-MM: 每月
2)''.''yyyy-ww: 每周
3)''.''yyyy-MM-dd: 每天
4)''.''yyyy-MM-dd-a: 每天两次
5)''.''yyyy-MM-dd-HH: 每小时
6)''.''yyyy-MM-dd-HH-mm: 每分钟
D. RollingFileAppender
Threshold=WARN:指定日志消息的输出最低层次。
ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。
File=mylog.txt:指定消息输出到mylog.txt文件。
Append=false:默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容。
MaxFileSize=100KB: 后缀可以是KB, MB 或者是 GB. 在日志文件到达该大小时,将会自动滚动,即将原来的内容移到mylog.log.1文件。
MaxBackupIndex=2:指定可以产生的滚动文件的最大数。
3>、日志信息的格式:
1. log4j.appender.appenderName.layout = class
class:
org.apache.log4j.HTMLLayout #以HTML表格形式布局
org.apache.log4j.PatternLayout #灵活指定布局模式
org.apache.log4j.SimpleLayout #日志信息的级别和信息字符串
org.apache.log4j.TTCCLayout #包含日志产生时间,线程,类别等信息
1)、HTMLLayout
LocationInfo=true;默认值是false,输出java文件名称和行号;
Title =my app file;默认值是Log4J Log Messages;
2)、PatternLayout
ConversionPattern = %m%n 怎样格式化指定的消息
3)、XMLLayout
LocationInfo=true 默认false,输出java文件和行号
说明:log4j.appender.A1.layout.ConversionPattern=%-4r %-5p %d{yyyy-MM-dd HH:mm:ssS} %c %m%n
-x号:x信息输出时左对齐;
%p: 输出日志信息优先级,即debug info warn error fatal
%d: 输出日志时间点的日期或者时间,默认格式为ISO8601,也可以指定格式:%d{yyy MMM dd HH:mm:ss,SSS} 输出为:2018年4月24日 12:49:40 ,921
%r: 输出自应用启动到输出该log信息耗费的毫秒数
%c: 输出日志信息所属的类目,所在类的全名
%t: 输出改日志事件的线程名
%l: 输出日志事件发生位置,等价%C.%M(%F:%L)包含类目名,线程,以及代码中行数,eg:Test.Log4j.main(TestLog4j.java:10)
%x: 输出和当前线程相关的NDC(嵌套诊断环境),
%%:输出一个%字符
%F: 输出日志消息产生时所在文件名称
%L: 输出代码中行号
%m: 输出代码中指定的消息,产生的日志的具体消息
%n: 输出一个回车换行符,
在%与模式字符间加修饰符来控制其最小宽度,最大宽度,和文本的对齐方式
%20c:指定输出名称,最小宽度20,若小于20,默认右对齐
%-20c:指定输出名称最小宽度30,若小于20,默认左对齐
%.30c:指定最大宽度30,若大于,截取掉左边多出字符;小于不会有空格
%20.30c:若小于20用空格补,且右对齐,若大于30,截取掉左边字符;
此章我们从三要素了解一下日志的一些属性,下章我们将来看一个日志配置