log4j配置步骤及说明

Log4J的配置文件(Configuration File)就是用来设置记录器的级别、存放器和布局的,它可以以key=value格式的设置或xml格式的设置信息。通过配置,可以创建出Log4J的运行环境。

一、说明使用的步骤和配置的含义:

1. 配置文件
Log4J配置文件的基本格式如下:

#配置根Logger
log4j.rootLogger  =   [ level ]   ,  appenderName1 ,  appenderName2 ,  …

#配置日志信息输出目的地Appender
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.class 
  log4j.appender.appenderName.layout.option1  =  value1 
  … 
  log4j.appender.appenderName.layout.optionN  =  valueN 

其中 [level] 是日志输出级别,如下:

OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL

Appender 为日志输出目的地,Log4j提供的appender有以下几种:

org.apache.log4j.ConsoleAppender(控制台),
org.apache.log4j.FileAppender(文件),
org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件),
org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件),
org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)

如果指定appender为RollingFileAppender,那么还可以配置

#文件的最大size

log4j.appender.SPIFD.MaxFileSize=5MB 

#最多备份的文件数 
log4j.appender.SPIFD.MaxBackupIndex=10

Layout:日志输出格式,Log4j提供的layout有以下几种:

org.apache.log4j.HTMLLayout(以HTML表格形式布局),
org.apache.log4j.PatternLayout(可以灵活地指定布局模式),
org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),
org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)

当Layout设置为PatternLayout时,可以灵活的指定布局,如下:

   %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},输出类似:2002年10月18日  22 : 10 : 28 , 921  
   %l   输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(TestLog4.java: 10 ) 

二、配置一个简单的log4j.properties:

在CLASSPATH下建立log4j.properties,配置内容如下:

log4j.rootLogger=INFO, stdout , R

log4j.appender.stdout=org.apache.log4j.ConsoleAppender

log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

log4j.appender.stdout.layout.ConversionPattern= [TS] %p [%t] %C.%M(%L) | %m%n

log4j.appender.R=org.apache.log4j.DailyRollingFileAppender

log4j.appender.R.File=路径/R-name.log

log4j.appender.R.Threshold=INFO

log4j.appender.R.layout=org.apache.log4j.PatternLayout

log4j.appender.R.layout.ConversionPattern=%d-[TS] %p %t %c - %m%n

log4j.logger.com.java.hx.common=INFO,R

log4j.logger.org.springframework=ERROR

三、对于几个特定的地方做一个详细说明:

1、有很多地方讲到rootLogger,还有的地方配置的是rootCategory。查看了下资料,Log4j官方的API中这样描述:

public class Categoryextends java.lang.Objectimplements AppenderAttachable

This class has been deprecated and replaced by the Logger subclass. It will be kept around to preserve backward compatibility until mid 2003.

Logger is a subclass of Category, i.e. it extends Category. In other words, a logger is a category. Thus, all operations that can be performed on a category can be performed on a logger. Internally, whenever log4j is asked to produce a Category object, it will instead produce a Logger object. Log4j 1.2 will never produce Category objects but only Logger instances. In order to preserve backward compatibility, methods that previously accepted category objects still continue to accept category objects.

For example, the following are all legal and will work as expected.

       // Deprecated form:
   Category cat = Category.getInstance("foo.bar")

   // Preferred form for retrieving loggers:
   Logger logger = Logger.getLogger("foo.bar")

The first form is deprecated and should be avoided.

There is absolutely no need for new client code to use or refer to the Category class. Whenever possible, please avoid referring to it or using it.

See the short manual for an introduction on this class.

See the document entitled preparing for log4j 1.3 for a more detailed discussion.

 

 

Author:
Ceki Gülcü, Anders Kristensen
大概意思就是希望以后改为rootLogger(从1.2版本以后),当然如果继续配置为rootCategory,也不会报错。
只是最好尽量回避使用rootCategory。
2、log4j.appender.C.Threshold的使用很灵活,可以在appender中再次声明打印级别,比如在rootLogger中设置为:DEBUG,在appender中再次利用Threshold设置为INFO,那么该appender对应的文件中log的日志会将DEBUG级别的信息过滤掉。

猜你喜欢

转载自xm-koma.iteye.com/blog/1832817