`
61234865
  • 浏览: 11429 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Log4J备忘录

    博客分类:
  • java
阅读更多

构成

记录器(Loggers):用来记录日志,相当于日志记录对象,这个在配置文件中可能配置多个,用来对不同的目录进行分别记录

根记录器:

log4j.rootLogger = [ level ] , appenderName, appenderName, … 

在早期的Log4j版本中,org.apache.Category实现了记录器的功能,为了提高向后兼容 性,Logger扩展了Category,因此rootCategory和rootLogger是可以互换的,但最后Category将从类库中删除,因 此请使用Logger类。 level级别: 分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者您定义的级别。Log4j建议只使用四个级别:ERROR、WARN、INFO、DEBUG:

 

自定义记录器:

这个东西一般在一个较大的项目中会存在多个,以目录为区分.语法为:

log4j.logger.loggerName = [ level ] , appenderName, appenderName, … 

  例如:

log4j.logger.com.projectx.conf=info,stdout,logfile
log4j.logger.com.projectx.platform=info,stdout,logfile
log4j.logger.com.projectx.modules=warn,stdout,logfile
log4j.loggerojectx.collie=debug,stdout,logfile
log4j.logger.com.projectx.mq=debug,stdout,logfile
log4j.logger.com.projectx.jmx=warn,stdout,logfile

 

输出源(Appenders):这个用来存放日志信息,可以是控制台,也可以是文件,有如下几种:

 

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

  输出源可以进行参数配置:(具体需要哪些参数可以参见源代码)

log4j.appender.appenderName = fully.qualified.name.of.appender.classs
log4j.appender.appenderName.option1 = value1 
… 
log4j.appender.appenderName.option = valueN 

 

布局(Layouts):用来定义输入日志格式,有以下几种:

 

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

  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.rootCategory=debug  //全局记录器,注:这里没要配置输入源,因为下面每一个记录器都配置了输出源,记录器与记录器之间是继承关系,子类会覆盖掉父类的输出源(如果子类指定了,父类就没办法统一控制了),但输出的level级别是可以统一控制的,子类的级别如果高于父类则用子类,否则使用父类级别,例如:root级别为info,则子类为debug的时候日志也只输出info级别的,但子类如果是warn级别,则info不输出

//输出源1:控制台
log4j.appender.stdout=org.apache.log4j.ConsoleAppender //输出到控制台
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout //自定义布局
log4j.appender.stdout.layout.ConversionPattern=[%d]-%p-[%F:%L]-->>%m%n
//输出源2:日志文件
log4j.appender.logfile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.logfile.File=../logs/log4j.out //这里使用相对路径,便于不同平台部署
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=[%d]-%p-[%F:%L]-->>%m%n

//自定义记录器:
log4j.logger.com.projectx.conf=info,stdout,logfile //这里都指定了输出源,如果不指定,则走root配置,如果root也没指定的话,这个我也不知道,没实验过,猜想应该没有日志输出吧
log4j.logger.com.projectx.platform=info,stdout,logfile
log4j.logger.com.projectx.modules=warn,stdout,logfile
log4j.logger.com.projectx.collie=debug,stdout,logfile
log4j.logger.com.projectx.mq=debug,stdout,logfile
log4j.logger.com.projectx.jmx=warn,stdout,logfile

//自定义框架记录器
log4j.logger.org.hibernate=warn,stdout
log4j.logger.org.directwebremoting=warn,stdout
log4j.logger.org.springframework=WARN,stdout
log4j.logger.uk.ltd.getahead.dwr=WARN,stdout
log4j.logger.net.sf.ehcache=WARN,stdout
log4j.logger.org.apache.commons=WARN,stdout
log4j.logger.org.apache.struts=WARN,stdout
log4j.logger.com.opensymphony.xwork2=WARN,stdout
log4j.logger.org.apache.struts2=WARN,stdout
log4j.logger.org.acegisecurity=WARN,stdout
log4j.logger.freemarker=WARN,stdout
log4j.logger.org.apache.activemq=WARN,stdout
log4j.logger.org.quartz=WARN,stdout
 

代码中使用

代码中使用很简单,如下:

private static Logger log = Logger.getLogger ( XXXXXXXXX.class )
log.info("");
log.debug("");
 

总结

总的来说,log4j大体上就包含这么多东西。这里我只是做个总结来给自己备忘,一般项目开发过程中尽量不要使用system.out.priintln(),因为这种打印出来的日志不可控。一直都不能静下心来好好学点东西,现在总算是学了这么一点点小东西。整个log4j配置起来不复杂,但它这种实现思想很值得借鉴

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics