log4j.properties文件详解

声明

本文内容参考: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)

若是看了前文,咱们能够知道这是一个输出在控制台日志配置,那么下面的信息是干什么用的呢?咱们慢慢来说。

  1. log4j.appender.stdout.Threshold=info ,指定日志消息的输出最低层次为info。级别的大小按前文的表格来。可是有时候咱们会发现,设置的东西好像会不起做用。那是由于在log4j.rootCategory=INFO,stdout,R中也设置了日志最低级别,日志首先会按rootCategory中定义来,再按Threshold定义。也就是说,若是在rootCategory中定义为info,咱们在Threshold定义debug也不会输出debug日志。 2.log4j.appender.stdout.Target = System.out,默认状况,指定输出控制台。还有System.err,输出的效果就是报错的感受了。
  2. log4j.appender.stdout.layout=org.apache.log4j.PatternLayout,配置日志信息的格式中的灵活地指定布局模式。ConversionPattern就是格式信息了。
  3. log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %p %c{1}.%M(%l) ,日志格式信息,具体什么含义后文会说明。

###文件日志配置 同样的咱们须要定义一个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

上面的代码中能够咱们来慢慢看:

  1. log4j.appender.R.File=test.log,日志保存到test.log文件。
  2. og4j.appender.R.MaxFileSize=10000KB,文件大小,单位有B,KB,MB,GB,在日志文件到达该大小时,将会自动滚动,即将原来的内容移到mylog.log.1文件。
  3. log4j.appender.R.Threshold = DEBUG,这个就不说了。
  4. log4j.appender.R.MaxBackupIndex=1,指定能够产生的滚动文件的最大数。
  5. 最后两行应该也不用说了。
  6. 注意: Log4j中的RollingFileAppender是指知足必定大小后从新生成新的日志文件,我实验后发现生成的文件名格式是XXX.log.i(XXX是日志的名字,i从1往上递增)。 可是其中有个问题,自动生成的日志文件中XXX.log.MAX永远都是最初生成的那个日志,而XXX.log.1永远是刚生成的那个日志,也就是说日志的文件名在每生成一个新的文件后,全部的日志文件名都会改变一次。

####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
相关文章
相关标签/搜索