记log4j的使用

来源:互联网 发布:淘宝矫正牙套管不管用 编辑:程序博客网 时间:2024/06/14 20:32

以一个log4j.properties的代码为例子进行解释

log4j.rootCategory=INFO, stdout , Rlog4j.appender.stdout=org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.layout=org.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.ConversionPattern=[QC] %p [%t] %C.%M(%L) | %m%nlog4j.appender.R=org.apache.log4j.DailyRollingFileAppenderlog4j.appender.R.File=D:\\Tomcat 5.5\\logs\\qc.loglog4j.appender.R.layout=org.apache.log4j.PatternLayoutlog4j.appender.R.layout.ConversionPattern=%d-[TS] %p %t %c - %m%nlog4j.logger.com.neusoft=DEBUGlog4j.logger.com.opensymphony.oscache=ERRORlog4j.logger.net.sf.navigator=ERRORlog4j.logger.org.apache.commons=ERRORlog4j.logger.org.apache.struts=WARNlog4j.logger.org.displaytag=ERRORlog4j.logger.org.springframework=DEBUGlog4j.logger.com.ibatis.db=WARNlog4j.logger.org.apache.velocity=FATALlog4j.logger.com.canoo.webtest=WARNlog4j.logger.org.hibernate.ps.PreparedStatementCache=WARNlog4j.logger.org.hibernate=DEBUGlog4j.logger.org.logicalcobwebs=WARN

配置根Logger

log4j.rootCategory=INFO, stdout , R

这句的意思是将等级为INFO的日志输出到stdout,R两个目的地。stdout,R的名称可以自定义,后面将进行解释。

日志等级可以划分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL。配置OFF则不打印任何日志信息,如果配置INFO,将打印FATAL、ERROR、WARN、INFO的log信息,不会打印DEBUG的信息。

配置日志信息输出目的地 Appender

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

配置日志信息的格式(布局)Layout

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

定义stuout的输出端的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

使用PatternLayout布局需要定义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.File=D:\\Tomcat 5.5\\logs\\qc.log

文件格式的输出目的地

log4j.logger.com. neusoft =DEBUG

指定com.neusoft包下的所有类的等级为DEBUG

人各有所好,所以实现日志系统的工具也不尽相同,有人喜欢log4j,java自带的log,或者logback等等,所以一旦系统更换日志系统的时候就需要不断更改代码,为此slf4j出现解决了此问题。

slf4j类似于java中的接口,log4j,logback相当于slf4j的实现类,所以只需引用slf4j,不需关注具体的实现类。因此在代码中,都使用slf4j编写,以后更换日志系统就不需要更改代码,只需替换slf4j的实现。但是一个系统中只能有一个slf4j的实现日志系统,同时需要去除其他jar包对日志系统的依赖。

在项目中集成slf4j和log4j需要引用如下依赖:

<dependency>    <groupId>org.slf4j</groupId>    <artifactId>slf4j-api</artifactId>    <version>1.7.7</version></dependency><dependency>    <groupId>org.slf4j</groupId>    <artifactId>slf4j-log4j12</artifactId>    <version>1.7.7</version></dependency><dependency>    <groupId>log4j</groupId>    <artifactId>log4j</artifactId>    <version>1.2.16</version></dependency>

在代码中则调用slf4j包中的API

原创粉丝点击