LOG4J使用

Log4j 使用

内容

  • Log4J配置文件学习
  • 分析一个配置文件log4j.properties
  • 结合commons-logging与log4j
  • 输出格式控制符
  • 各种记录方式的使用
  • log4j 与 Spring

一、Log4J配置文件学习:

Log4j支持两种配置文件格式,一种是XML格式的文件,一种是Java特性文件(键=值)。

配置文件要做的事:日志级别、选择器、输出方式、输出格式。

  • 日志级别:

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

  • 选择器: 就是指明记录日志的目标类对象,知道css,jquery等选择器吗?一个道理而已。

首先,log4j.rootLogger是根记录选择器,对项目中的所有类都有效,通常配置到控制台上。

例如 log4j.rootLogger=DEBUG, A1。debug指信息级别,A1(可以随便命名)指记录器,接下来会详细介绍各种记录器。

其次,某类和某个包下的控制。

log4j.logger.com.reyosoft.robin=debug // 表示robin包下的所有类的日志输出界别为debug

log4j.logger.com.reyosoft.robin.Test=INFO // 表示Test类的日志输出界别为INFO

最后,类中不同的记录,可能一个类有几种不同的日志要记录。就用这个方法啦。

log4j.logger.com.reyosoft.robin.Test.xxx=ERROR

log4j.logger.com.reyosoft.robin.Test.yyy=INFO

这里的xxx和yyy就是在Test类中定义的,格式如下:

private static Log log = LogFactory?.getLog(this.class.getClass+".xxx");

  • 输出方式: 输出方式有

配置很简单,声明记录器,配置记录器。

声明记录器如下:

log4j.rootLogger=DEBUG, A1 log4j.logger.com.reyosoft.robin=debug,A2 log4j.logger.com.reyosoft.robin.Test.xxx=ERROR,A3,A4,A5 //注意这,可以同时附加个几个记录器哦!

配置记录器如下:

log4j.appender.A1=org.apache.log4j.ConsoleAppender? log4j.appender.A1.Threshold=info log4j.appender.A1.layout=org.apache.log4j.PatternLayout? log4j.appender.A1.layout.ConversionPattern?=%p [%t] %c{2} (%M:%L) - %m%n

log4j.appender.A2=org.apache.log4j.FileAppender? log4j.appender.A2.Threshold=info log4j.appender.A2.layout=org.apache.log4j.PatternLayout? log4j.appender.A2.layout.ConversionPattern?=%p [%t] %c{2} (%M:%L) - %m%n

A3 A4 A5 . . .

二、 分析一个配置文件log4j.properties

log4j.rootCategory=debug,A1,A2
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%5p[%t](%F:%L)-%m%n

log4j.appender.A2=org.apache.log4j.RollingFileAppender
log4j.appender.A2.File=example.log
log4j.appender.A2.MaxFileSize=100KB
log4j.appender.A2.MaxBackupIndex=1
log4j.appender.A2.layout=org.apache.log4j.PatternLayout
log4j.appender.A2.layout.ConversionPattern=%p%t%c-%m%n

说明:

①log4j.rootCategory=[level],appenderName,appenderName,?

其中,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?(将日志信息以流格式发送到任意指定的地方)

③配置日志信息的格式(布局),其语法为:

log4j.appender.appenderName.layout=fully.qualified.name.of.layout.class

log4j.appender.appenderName.layout.option1=value1

...

log4j.appender.appenderName.layout.option=valueN

其中,Log4j提供的layout有以下几种: org.apache.log4j.HTMLLayout(以HTML表格形式布局),

org.apache.log4j.PatternLayout?(可以灵活地指定布局模式),

org.apache.log4j.SimpleLayout?(包含日志信息的级别和信息字符串),

org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)

④Log4J采用类似C语言中的printf函数的打印格式格式化日志信息,打印参数接下来解释:

三、 结合commons-logging与log4j

why: Commons-loggin的目的是为“所有的Java日志实现”提供一个统一的接口,它自身的日志功能平常弱(只有一个简单的SimpleLog??), 所以一般不会单独使用它。 Log4j的功能非常全面强大,是目前的首选。我发现几乎所有的Java开源项目都会用到Log4j,但我同时发现,所有用到Log4j的项目一般也同时 会用到commons-loggin。我想,大家都不希望自己的项目与Log4j绑定的太紧密吧。另外一个我能想到的“同时使用commons- logging和Log4j”的原因是,提供一个统一的日志接口,简单了操作,同时避免项目与某个日志实现系统紧密a耦合很贴心的帮我们自动选择适当的日 志实现系统(这一点非常好!)它甚至不需要配置

how: 1,把commons-logging.xx.jar放入classpath中。

2,查看classpath中是否有Log4j的包,如果发现,则自动使用Log4j作为日志实现类; 3, import org.apache.commons.logging.Log;

import org.apache.commons.logging.LogFactory?;

...

private static Log log = LogFactory?.getLog(this.class);

  • 1 debug() 输出“调试”级别的日志信息;
  • 2 info() 输出“信息”级别的日志信息;
  • 3 warn() 输出“警告”级别的日志信息;
  • 4 error() 输出“错误”级别的日志信息;
  • 5 fatal() 输出“致命错误”级别的日志信息;

四、输出格式控制符

Log4J采用类似C语言中的printf函数的打印格式格式化日志信息 Each conversion specifier starts with a percent sign (%) and is followed by optional format modifiers and a conversion character. the format modifiers control such things as field width, padding, left and right justification. %-5p means the priority of the logging event should be left justified to a width of five characters.

【格式语法:】

%[格式修饰符][转义字符]

【格式修饰符】

包括字符宽度、字符padding左右控制。%50m 表示信息至少占据50字符位置,且靠右对齐。%-50m 就是考左对齐。

【转义字符】

  • m (message)输出代码中指定的消息
  • n (/n)输出一个回车换行符,Windows平台为“/r/n”,Unix平台为“/n”
  • c (category) 所属类或包,例如:com.robin.app.Test 要输出Test类的位置,%c{3} 输出:robin.app.Test.
  • d (date) 时间日期,默认格式(%d):{yyyy-MM-dd hh:mm:ss,SSS} ,自定义:%d{hh:mm:ss}
  • F (file name) 所属文件名。常结合L使用,请看L
  • L (line) 所属文件的行。例如:(%13F:%L) 输出:(Test.java:145) 如果是在控制台中,输出带有连接,点击后转到该文件
  • l (location)输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。
  • M (method) 方法名
  • r (run) 输出自应用启动到输出该log信息耗费的毫秒数
  • t (thread) 输出产生该日志事件的线程名
  • p (priority) 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL

五、各种记录方式的使用

# 应用于控制台

log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender?

log4j.appender.Threshold=DEBUG

log4j.appender.CONSOLE.Target=System.out

log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout?

log4j.appender.CONSOLE.layout.ConversionPattern?=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n

#应用于文件

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

# 应用于文件回滚

log4j.appender.ROLLING_FILE=org.apache.log4j.RollingFileAppender?

log4j.appender.ROLLING_FILE.Threshold=ERROR

log4j.appender.ROLLING_FILE.File=rolling.log

log4j.appender.ROLLING_FILE.Append=true

log4j.appender.ROLLING_FILE.MaxFileSize?=10KB

log4j.appender.ROLLING_FILE.MaxBackupIndex?=1

log4j.appender.ROLLING_FILE.layout=org.apache.log4j.PatternLayout?

log4j.appender.ROLLING_FILE.layout.ConversionPattern?=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n

#应用于socket log4j.appender.SOCKET=org.apache.log4j.RollingFileAppender?

log4j.appender.SOCKET.RemoteHost?=localhost

log4j.appender.SOCKET.Port=5001

log4j.appender.SOCKET.LocationInfo?=true

# Set up for Log Facter 5

log4j.appender.SOCKET.layout=org.apache.log4j.PatternLayout?

log4j.appender.SOCET.layout.ConversionPattern?=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[THREAD]%n%c[CATEGORY]%n%m[MESSAGE]%n%n

# Log Factor 5 Appender

log4j.appender.LF5_APPENDER=org.apache.log4j.lf5.LF5Appender

log4j.appender.LF5_APPENDER.MaxNumberOfRecords?=2000

# 发送日志给邮件

log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender

log4j.appender.MAIL.Threshold=FATAL

log4j.appender.MAIL.BufferSize?=10

log4j.appender.MAIL.From=xxx@www.xxx.com

log4j.appender.MAIL.SMTPHost=www.wusetu.com

log4j.appender.MAIL.Subject=Log4J Message

log4j.appender.MAIL.To=xxx@www.xxx.com

log4j.appender.MAIL.layout=org.apache.log4j.PatternLayout?

log4j.appender.MAIL.layout.ConversionPattern?=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n

# 用于数据库 log4j.appender.DATABASE=org.apache.log4j.jdbc.JDBCAppender

log4j.appender.DATABASE.URL=jdbc:mysql://localhost:3306/test

log4j.appender.DATABASE.driver=com.mysql.jdbc.Driver

log4j.appender.DATABASE.user=root

log4j.appender.DATABASE.password=

log4j.appender.DATABASE.sql=INSERT INTO LOG4J (Message) VALUES ('[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n')

log4j.appender.DATABASE.layout=org.apache.log4j.PatternLayout?

log4j.appender.DATABASE.layout.ConversionPattern?=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n

log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender?

log4j.appender.A1.File=SampleMessages?.log4j

log4j.appender.A1.DatePattern?=yyyyMMdd-HH'.log4j'

log4j.appender.A1.layout=org.apache.log4j.xml.XMLLayout

输出到2000NT日志

把Log4j压缩包里的NTEventLogAppender.dll拷到WINNT/SYSTEM32目录下

log4j.logger.NTlog=FATAL, A8

# APPENDER A8

log4j.appender.A8=org.apache.log4j.nt.NTEventLogAppender

log4j.appender.A8.Source=JavaTest?

log4j.appender.A8.layout=org.apache.log4j.PatternLayout?

log4j.appender.A8.layout.ConversionPattern?=%-4r %-5p [%t] %37c %3x - %m%n

#自定义Appender

log4j.appender.im = net.cybercorlin.util.logger.appender.IMAppender

log4j.appender.im.host = mail.cybercorlin.net

log4j.appender.im.username = username

log4j.appender.im.password = password

log4j.appender.im.recipient = xxx@xxx.net

log4j.appender.im.layout=org.apache.log4j.PatternLayout?

log4j.appender.im.layout.ConversionPattern? =[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n

六、log4j 与 Spring

项目中必须是在使用spring,如果不使用spring,可以自己写个servlet,在web.xml添加一个监听器指向这个servlet,其实spring也是这么干的。 web.xml加入

<context-param>   
  <param-name>webAppRootKey</param-name>  
  <param-value>webApp.root</param-value> 
</context-param>   
<context-param>   
  <param-name>log4jConfigLocation</param-name>   
  <param-value>/WEB-INF/classes/log/log4j.properties</param-value> 
</context-param>    
<context-param>       
  <param-name>log4jRefreshInterval</param-name>       
  <param-value>600000</param-value>
</context-param>       
<listener>       
 <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class> 
</listener>

然后log4j.properties里面指定文件路径的时候就可以用${webApp.root}/ log4j.appender.info.File=${webApp.root}/WEB-INF/logs/info.log 同时你的web项目必须有/WEB-INF/logs这个目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值