本文内容参考:http://blog.csdn.net/edward0830ly/article/details/8250412。 固然还有不少不是。apache
日志记录器(Logger)是日志处理的核心组件,在log4j中有6种正常的日志级别,2种特殊的日志级别。 在org.apache.log4j.Level类中日志定义级别源码以下:多线程
public static final Level OFF = new Level(2147483647, "OFF", 0); public static final Level FATAL = new Level('썐', "FATAL", 0); public static final Level ERROR = new Level('鱀', "ERROR", 3); public static final Level WARN = new Level(30000, "WARN", 4); public static final Level INFO = new Level(20000, "INFO", 6); public static final Level DEBUG = new Level(10000, "DEBUG", 7); public static final Level TRACE = new Level(5000, "TRACE", 7); public static final Level ALL = new Level(-2147483648, "ALL", 7);
org.apache.log4j.Level类提供如下级别,但也能够经过Level类的子类自定义级别。app
Level | 描述 |
---|---|
ALL | 各级包括自定义级别 |
TRACE | 指定细粒度比DEBUG更低的信息事件 |
DEBUG | 指定细粒度信息事件是最有用的应用程序调试 |
INFO | 指定可以突出在粗粒度级别的应用程序运行状况的信息的消息 |
WARN | 指定具备潜在危害的状况 |
ERROR | 错误事件可能仍然容许应用程序继续运行 |
FATAL | 指定很是严重的错误事件,这可能致使应用程序停止 |
OFF | 这是最高等级,为了关闭日志记录 |
###配置日志信息输出目的地布局
log4j.appender.appenderName = fully.qualified.name.of.appender.class 1.org.apache.log4j.ConsoleAppender(控制台) 2.org.apache.log4j.FileAppender(文件) 3.org.apache.log4j.DailyRollingFileAppender(天天产生一个日志文件) 4.org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件) 5.org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
解析:在上面的例子中有一个log4j.appender.appenderName;这里的appenderName表明在log4j.priperties文件最开始的地方,定义的名字,例如:.net
log4j.rootCategory=INFO,stdout,R
appenderName能够为INFO、stdout、R。 fully.qualified.name.of.appender.class表明的是,案例中1到5的对象。线程
###配置日志信息的格式debug
log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class 1.org.apache.log4j.HTMLLayout(以HTML表格形式布局), 2.org.apache.log4j.PatternLayout(能够灵活地指定布局模式), 3.org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串), 4.org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)
同理,appenderName表明的含义如上一章节所述。fully.qualified.name.of.layout.class含义同样。调试
###控制台日志配置日志
咱们首先须要定义appenderName为org.apache.log4j.ConsoleAppender,在给这个appenderName赋予各类条件。以下:code
log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.Threshold=info log4j.appender.stdout.Target = System.out log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %p %c{1}.%M(%l)
若是看了前文,咱们能够知道这是一个输出在控制台日志配置,那么下面的信息是干什么用的呢?咱们慢慢来说。
log4j.rootCategory=INFO,stdout,R
中也设置了日志最低级别,日志首先会按rootCategory中定义来,再按Threshold定义。也就是说,若是在rootCategory中定义为info,咱们在Threshold定义debug也不会输出debug日志。 2.log4j.appender.stdout.Target = System.out,默认状况,指定输出控制台。还有System.err,输出的效果就是报错的感受了。###文件日志配置 同样的咱们须要定义一个appenderName为文件输出格式,可是文件输出格式在上文中提到有三种,咱们本身按需求选择一个格式保存日志就能够了,下面来详细介绍一下。
####RollingFileAppender 指定一个大小,产生新文件。
log4j.appender.R=org.apache.log4j.RollingFileAppender log4j.appender.R.File=test.log log4j.appender.R.MaxFileSize=10000KB log4j.appender.R.Threshold = DEBUG # Keep one backup file log4j.appender.R.MaxBackupIndex=1 log4j.appender.R.layout=org.apache.log4j.PatternLayout log4j.appender.R.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %p %c{1}.%M(%L) | %m%n
上面的代码中能够咱们来慢慢看:
####DailyRollingFileAppender 天天产生一个新文件。
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender log4j.appender.D.File = 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.Append = true。
1.log4j.appender.D.Append = true,默认值是true,即将消息增长到指定文件中,false指将消息覆盖指定的文件内容。
####FileAppender 只有一个日志文件
log4j.appender.FILE=org.apache.log4j.FileAppender log4j.appender.FILE.File=file.log log4j.appender.FILE.Append=false log4j.appender.FILE.layout=org.apache.log4j.PatternLayout log4j.appender.FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
###属性说明汇总
控制台 Threshold=DEBUG:指定日志消息的输出最低层次。 ImmediateFlush=true:默认值是true,意谓着全部的消息都会被当即输出。 Target=System.err:默认状况下是:System.out,指定输出控制台 FileAppender 选项 Threshold=DEBUF:指定日志消息的输出最低层次。 ImmediateFlush=true:默认值是true,意谓着全部的消息都会被当即输出。 File=mylog.txt:指定消息输出到mylog.txt文件。 Append=false:默认值是true,即将消息增长到指定文件中,false指将消息覆盖指定的文件内容。 RollingFileAppender 选项 Threshold=DEBUG:指定日志消息的输出最低层次。 ImmediateFlush=true:默认值是true,意谓着全部的消息都会被当即输出。 File=mylog.txt:指定消息输出到mylog.txt文件。 Append=false:默认值是true,即将消息增长到指定文件中,false指将消息覆盖指定的文件内容。 MaxFileSize=100KB: 后缀能够是KB, MB 或者是 GB. 在日志文件到达该大小时,将会自动滚动,即将原来 的内容移到mylog.log.1文件。 MaxBackupIndex=2:指定能够产生的滚动文件的最大数。 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},输出相似:2002年10月18日 22:10:28,921 %r: 输出自应用启动到输出该log信息耗费的毫秒数 %c: 输出日志信息所属的类目,一般就是所在类的全名 %t: 输出产生该日志事件的线程名 %l: 输出日志事件的发生位置,至关于%C.%M(%F:%L)的组合,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main (TestLog4.Java:10) %x: 输出和当前线程相关联的NDC(嵌套诊断环境),尤为用到像Java servlets这样的多客户多线程的应用中。 %%: 输出一个"%"字符 %F: 输出日志消息产生时所在的文件名称 %L: 输出代码中的行号 %m: 输出代码中指定的消息,产生的日志具体信息 %n: 输出一个回车换行符,Windows平台为"\r\n",Unix平台为"\n"输出日志信息换行 能够在%与模式字符之间加上修饰符来控制其最小宽度、最大宽度、和文本的对齐方式。如: 1)%20c:指定输出category的名称,最小的宽度是20,若是category的名称小于20的话,默认的状况下右对齐。 2)%-20c:指定输出category的名称,最小的宽度是20,若是category的名称小于20的话,"-"号指定左对齐。 3)%.30c:指定输出category的名称,最大的宽度是30,若是category的名称大于30的话,就会将左边多出的字符截掉,但小于30的话也不会有空格。 4)%20.30c:若是category的名称小于20就补空格,而且右对齐,若是其名称长于30字符,就从左边较远输出的字符截掉。
###一个example
log4j.rootCategory=debug,stdout,R log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.Threshold=info log4j.appender.stdout.Target = System.err log4j.appender.stdout.layout=org.apache.log4j.PatternLayout # Pattern to output the caller's file name and line number. log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %p %c{1}.%M(%l) | %m%n log4j.appender.R=org.apache.log4j.RollingFileAppender log4j.appender.R.File=test.log log4j.appender.R.MaxFileSize=1KB log4j.appender.R.Threshold = DEBUG # Keep one backup file log4j.appender.R.MaxBackupIndex=1 log4j.appender.R.layout=org.apache.log4j.PatternLayout log4j.appender.R.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %p %c{1}.%M(%L) | %m%n