LOG4J COMMON-LOGGING 简单认识

来源:互联网 发布:在淘宝被骗了怎么办 编辑:程序博客网 时间:2024/05/17 09:14

Common-logging:这个包中提供了一个LOG接口,只要实现了这个接口,他就是一个名副其实的LOGGER组件,因此Log4JLogger类实现了这个接口,

还有类似jdk的sun logger(Jdk14Logger)也实现了这个LOG接口,而LogFactory 是一个专为提供 Log 的工厂(abstract class),LogFactoryImpl继承了这个抽象类,也就是说

Common-logging中的LogFactory 为我们统一了这些日志的接口,如果不使用LOG4J,common-logging只为我们提供了一个简单的实现SimpleLog,功能不强。

LogFactory(负责创建LOG实例),执行步骤如下:从LogSource.java的源代码中可以看出其加载顺序

1.Common-logging会去classpath下寻找配置文件commons-logging.properties文件,

2.如果没有则查找是否定义了系统环境变量org.apache.commons.logging.Log,找到则使用其定义Log实现类

3.应用程序中有没有Log4J.jar,有的话会去使用相关的包装类LOG4jLogger

4.使用应用程序运行在jdk的系统中,使用包装类(jdk14Logger)

5.使用简易日志包装类(SimpleLog)

当Common-logging和Log4J一起使用的话,就要调用LogFactory.getLog()

LOG4J

信息级别:fatal,error,warn,info,debug,trace,单独使用Log4J的话,直接调用 Logger.getLogger(), 使用Log4J,那么log4j.properties文件就是必须的了,Log4J中的

LogManager会先查看classpath下是否有log4j.xml文件,没有才会加载log4j.properties,有的话就使用log4j.xml,当使用Maven的时候,当引入了jxl.jar的时候,由于这个jar

下面有一个log4j.xml文件,所以web项目就不会加载自己的log4j.properties,所以导致日志没有输出,需要手工重新configure一下:

org.apache.log4j.LogManager.resetConfiguration();

然后:org.apache.log4j.PropertyConfigurator.configure("ClassLoader.getSystemResource("log4j.properties")"); 或者org.apache.log4j.xml.DOMConfigurator.configure

("ClassLoader.getSystemResource("log4j.properties")");

Log4J.properties文件的内容说明 

log4j.rootLogger=日志级别,appender1, appender2, ….

例如:log4j.rootLogger=DEBUG,CONSOLE,APPLOG:后面的appender1和append2表示输出日志到哪里

CONSOLE表示 log4j.appender.CONSOLE

APPLOG表示 log4j.appender.APPLOG

log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender配置表示,日志输出到控制台

rootLogger默认是对整个工程生效

Appender包括:

ConsoleAppender(控制台)

FileAppender(文件)

DailyRollingFileAppender(每天产生一个日志文件)

RollingFileAppender(文件大小到达指定尺寸时产生一个新的文件)

WriteAppender(将日志信息以流格式发送到任意指定的地方)

JDBCAppender(将日志信息保存到数据库中)

log4j.appender.APPLOG.File=/data1/logs/tomcat/server1/AppAccessLog 表示输出文件的目录

log4j.appender.APPLOG.MaxFileSize=最大文件大小

log4j.appender.MaxBackupIndex=备份文件个数

log4j.appender.ServerDailyRollingFile.Append=true 追加继续往后写

log4j.appender.ServerDailyRollingFile.DatePattern=日志后缀格式

log4j.appender.APPLOG.layout=org.apache.log4j.日志布局格式

HTMLLayout(以HTML表格形式布局)

SimpleLayout(包含日志信息的级别和信息字符串)

TTCCLayout(包含日志产生的时间,执行绪,类别等信息)

PatternLayout(可以灵活的指定布局格式,常用

log4j.appender.appender1.APPLOG.ConversionPattern=日志输出格式 

例如,%d - %m%n或%d{yyyy-MM-dd HH:mm:ss} %p [%c] %m%n

%c 输出日志信息所属的类的全名

%d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy-M-dd HH:mm:ss },输出类似:2002-10-18- 22:10:28

%f 输出日志信息所属的类的类名

%l 输出日志事件的发生位置,即输出日志信息的语句处于它所在的类的第几行

%m 输出代码中指定的信息,如log(message)中的message

%n 输出一个回车换行符,Windows平台为“rn”,Unix平台为“n”

%p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL。如果是调用debug()输出的,则为DEBUG,依此类推

%r 输出自应用启动到输出该日志信息所耗费的毫秒数

%t 输出产生该日志事件的线程名

可参考:http://blog.sina.com.cn/s/blog_4e4dd5570100qowy.html

#缓存日志,定义缓存的日志级别和CACHELOG输出方式

log4j.logger.cache=ERROR, CACHELOG   (cache指定在cache包下的内容)

#后台管理日志,定义后台管理的日志级别和ADMINLOG的输出方式 

log4j.logger.admin=ERROR, ADMINLOG   (admin指定在admin包下的内容)

补充:有关日志文件输出路径

如果不指定路径,日志文件是输出在运行目录的,也就是应用服务器的bin目录下

假设应用服务器用的是tomcat,那么SampleMessages.log4j文件会在tomcat安装目录的bin子目录下 

为了把日志文件统一存放,请使用绝对路径或相对路径,比如下面:  

log4j.appender.A1.File = ../logs/SampleMessages.log4j

这样日志文件将放在tomcat的logs目录内







 

 

 

 

 

 

0 0