log4j 学习资料整理

来源:互联网 发布:h3c路由器开启80端口 编辑:程序博客网 时间:2024/06/13 03:35
log4j 学习资料整理


一、log4j配置步骤
Log4j是Apache的一个开源项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件,甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。


具体配置步骤如下:
1)加入加入log4j-XXX.jar到lib下,如果是maven工程就可以写到pom中
   <dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
      <version>1.2.17</version>
      <type>jar</type>
      <scope>compile</scope>
    </dependency>
    
2)在CLASSPATH下建立log4j.properties.并且修改相关的属性
log4j.rootCategory=INFO, stdout , R
    ----此句为将等级为INFO的日志信息输出到stdout和R这两个目的地,
stdout和R的定义在下面的代码,可以任意起名。
等级可分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL,
如果配置OFF则不打出任何信息,如果配置为INFO这样只显示INFO、WARN、ERROR的log信息,
而DEBUG信息不会被显示。日志只打印比其优先级高的日志级别。
 
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
此句为定义名为stdout的输出端是哪种类型,可以是
org.apache.log4j.ConsoleAppender(控制台),
org.apache.log4j.FileAppender(文件),
org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件),
org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)
org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)

log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
此句为定义名为stdout的输出端的layout是哪种类型,可以是
org.apache.log4j.HTMLLayout(以HTML表格形式布局),
org.apache.log4j.PatternLayout(可以灵活地指定布局模式),
org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),
org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)

log4j.appender.stdout.layout.ConversionPattern=[QC] %p [%t] %C.%M(%L) | %m%n
 如果使用pattern布局就要指定的打印信息的具体格式ConversionPattern,打印参数如下:
%m 输出代码中指定的消息;
%M 输出打印该条日志的方法名;
%p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL;
%r 输出自应用启动到输出该log信息耗费的毫秒数;
%c 输出所属的类目,通常就是所在类的全名;
%t 输出产生该日志事件的线程名;
%n 输出一个回车换行符,Windows平台为"rn”,Unix平台为"n”;
%d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyyy-MM-dd HH:mm:ss,SSS},输出类似:2002-10-18 22:10:28,921;
%l 输出日志事件的发生位置,及在代码中的行数;
[QC]是log信息的开头,可以为任意字符,一般为项目简称。

log4j.appender.R=org.apache.log4j.DailyRollingFileAppender
log4j.appender.R.File=D:\\Tomcat 5.5\\logs\\qc.log

此句为定义名为R的输出端的文件名为D:\\Tomcat 5.5\\logs\\qc.log可以自行修改。
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%d-[TS] %p %t %c - %m%n
log4j.logger.com.neusoft=DEBUG

    指定com.neusoft包下的所有类的等级为DEBUG。
    可以把com.neusoft改为自己项目所用的包名。
log4j.logger.com.opensymphony.oscache=ERROR
log4j.logger.net.sf.navigator=ERROR
log4j.logger.org.apache.commons=ERROR



Log4j支持两种配置文件格式,一种是XML(标准通用标记语言下的一个应用)格式的文件,一种是Java特性文件log4j.properties(键=值)。下面将介绍使用log4j.properties文件作为配置文件的方法:


详细解读配置文件
①、配置根Logger
Logger 负责处理日志记录的大部分操作。
其语法为:
log4j.rootLogger = [ level ] , appenderName, appenderName, …
其中,level 是日志记录的优先级,分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者自定义的级别。Log4j建议只使用四个级别,优先级从高到低分别是ERROR、WARN、INFO、DEBUG。通过在这里定义的级别,您可以控制到应用程序中相应级别的日志信息的开关。比如在这里定义了INFO级别,只有等于及高于这个级别的才进行处理,则应用程序中所有DEBUG级别的日志信息将不被打印出来。ALL:打印所有的日志,OFF:关闭所有的日志输出。 appenderName就是指定日志信息输出到哪个地方。可同时指定多个输出目的地。


②、配置日志信息输出目的地 Appender
Appender 负责控制日志记录操作的输出。
其语法为:
log4j.appender.appenderName = XXXXXXXXX
og4j.appender.appenderName.option1 = value1

log4j.appender.appenderName.optionN = valueN
Log4j提供的appender有以下几种:
org.apache.log4j.ConsoleAppender(控制台),
org.apache.log4j.FileAppender(文件),
org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件),
org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件),
可通过log4j.appender.R.MaxFileSize=100KB设置文件大小,
还可通过log4j.appender.R.MaxBackupIndex=1设置为保存一个备份文件。
org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)


③、配置日志信息的格式(布局)Layout
Layout 负责格式化Appender的输出。
其语法为:
log4j.appender.appenderName.layout = XXXXXXX
log4j.appender.appenderName.layout.option1 = value1

log4j.appender.appenderName.layout.optionN = valueN
其中,Log4j提供的layout有以下几种:
org.apache.log4j.HTMLLayout(以HTML表格形式布局),
org.apache.log4j.PatternLayout(可以灵活地指定布局模式),
org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),
org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)




3)在要输出日志的类中加入相关语句即可
定义属性:static Logger logger = Logger.getLogger(LogDemo.class); //LogDemo为相关的类


二、日志级别描述


日志记录器(Logger)的可用级别Level (不包括自定义级别): 由低到高一次为:


static Level ALL


ALL Level是最低等级的,用于打开所有日志记录。


static Level DEBUG


DEBUG Level指出细粒度信息事件对调试应用程序是非常有帮助的。


static Level INFO


INFO level表明 消息在粗粒度级别上突出强调应用程序的运行过程。


static Level WARN


WARN level表明会出现潜在错误的情形。


static Level ERROR


ERROR level指出虽然发生错误事件,但仍然不影响系统的继续运行。


static Level FATAL


FATAL level指出每个严重的错误事件将会导致应用程序的退出。


static Level OFF


OFF Level是最高等级的,用于关闭所有日志记录。


日志记录器(Logger)的行为是分等级的。如下表所示:


分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者您定义的级别。Log4j建议只使用四个级别,优先级从高到低分别是ERROR、WARN、INFO、DEBUG。通过在这里定义的级别,您可以控制到应用程序中相应级别的日志信息的开关。比如在这里定义了INFO级别,则应用程序中所有DEBUG级别的日志信息将不被打印出来


三、具体配置文件实例


 ### 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.E = org.apache.log4j.DailyRollingFileAppender
log4j.appender.E.File = logs/error.log ## 异常日志文件名
log4j.appender.E.Append = true
log4j.appender.E.Threshold = ERROR ## 只输出ERROR级别以上的日志!!!
log4j.appender.E.layout = org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n


在文件中建立一个专门管理日志的类:
import org.apache.log4j.Logger;


public class Logs {
public static Logger D = null;
public static Logger E = null;
static {
D = Logger.getLogger("D");
E = Logger.getLogger("E");


}
}


在其他类中可以直接使用,日志就直接输出到指定的文件中了。
Logger log = Logs.D;




工程配置可以如下:
log4j.rootCategory=INFO, file,stdout
log4j.logger.task=INFO,stdout,task
log4j.logger.process=INFO,stdout,process
log4j.logger.timer=INFO,stdout,timer


log4j.appender.process=org.apache.log4j.RollingFileAppender
log4j.appender.process.File=../logs/process.log
log4j.appender.process.MaxFileSize=10000KB
log4j.appender.process.MaxBackupIndex=10
log4j.appender.process.layout=org.apache.log4j.PatternLayout
log4j.appender.process.layout.ConversionPattern=%-4r [%t] [%-5p] %c{2} %d{yyyy-MM-dd HH:mm:ss,SSS} method: %l%n%m%n


log4j.appender.timer=org.apache.log4j.RollingFileAppender
log4j.appender.timer.File=../logs/timer.log
log4j.appender.timer.MaxFileSize=10000KB
log4j.appender.timer.MaxBackupIndex=10
log4j.appender.timer.layout=org.apache.log4j.PatternLayout
log4j.appender.timer.layout.ConversionPattern=%-4r [%t] [%-5p] %c{2} %d{yyyy-MM-dd HH:mm:ss,SSS} method: %l%n%m%n


log4j.appender.task=org.apache.log4j.RollingFileAppender
log4j.appender.task.File=../logs/task.log
log4j.appender.task.MaxFileSize=10000KB
log4j.appender.task.MaxBackupIndex=10
log4j.appender.task.layout=org.apache.log4j.PatternLayout
log4j.appender.task.layout.ConversionPattern=[%-5p][%t] [%d{HH\:mm\:ss}] %l-%m%n


#writer console
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=[%-5p][%t] [%d{HH\:mm\:ss}] %l-%m%n
原创粉丝点击