`
feitianxm
  • 浏览: 15727 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

log4j学习总结

阅读更多
最近参与公司的一个新项目,前期负责日志模块的工作,包括日志收集,日志输出(文件,数据库),日志管理,  由于之前只是在代码中简单的使用了log4j的Logger对象进行日志打印的编码工作,但对于如果使用log4j来搭建一个完整的日志模块的工作没有什么经验,所以自己就花了点时间来熟悉这方面的工作,总体来讲不是很难,因为网上这方面的资料很多,只是有些零散,所以我在这里就将我自己工作中如何使用log4j的心得做下总结,希望对大家有所帮助,有不当之处还请各位“大虾”多指点,谢谢!!!。

总结如下三点:
一:log4j配置文件说明
二:Web应用系统中log4j的初始化
三:Web应用系统动态加载修改的log4j配置文件


现在主要对上述三点运用进行说明:

一:log4j的基本配置说明
Log4j提供两种方式的配置文件,XML文件和properties属性文件,下面我以properties格式的配置文件为例进行说明。
1:定义一个Logger。在定义Logger的时指定该Logger的级别及输出目的地(即输出端Appender, 可以多个)。 定义Logger的格式如下:
log4j.rootLogger=loggerLevel,  appenderName1,  appenderName2,  ….appenderNameN
例: log4j.rootLogger=DEBUG, A1, A2, A3
该Logger的日志输出级别为DEBUG( 日志级别还包括有:INFO, WARN, ERROR ),同时定义三个输出端Appender:A1,A2,A3

2:定义Appender的输出目的地。 定义一个Appender的输出目的地的格式如下:
log4j.appender.appenderName = fully.qualified.name.of.appender.class
log4j提供的输出端有:(前缀为org.apache.log4j.)
ConsoleAppender: 将日志信息输出到控制台
FileAppender:   将日志信息输出到一个文件
WriterAppender:  将日志信息以流格式发送到任意指定的地方
JDBCAppender:    通过JDBC把日志信息输出到数据库中(参考下面实例)
DailyRollingFileAppender: 将日志信息输出到一个文件,并且每天输出到一个新的日志文件中
RollingFileAppender:将日志信息输出到一个文件,通过指定文件的的尺寸,当文件大小到达指定尺寸的时候会自动把文件改名(参考下面实例)

3:定义Appender的布局模式。定义一个Appender的布局模式的格式如下:
log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class
Log4j提供的布局模式有以下几种:
org.apache.log4j.HTMLLayout,   以HTML表格形式布局
org.apache.log4j.PatternLayout,可以灵活地指定布局模式
org.apache.log4j.SimpleLayout, 包含日志信息的级别和信息字符串

4:指定输出信息的输出格式及其含义如下:
%c 输出日志信息所属的类的全名
%d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy-MM-dd HH:mm:ss },输出类似:2002-10-18- 22:10:28
%f 输出日志信息所属的类的类名
%l 输出日志事件的发生位置,即输出日志信息的语句处于它所在的类的第几行
%m 输出代码中指定的信息,如log(message)中的message
%n 输出一个回车换行符,Windows平台为“\r\n”,Unix平台为“\n”
%p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL。
%r 输出自应用启动到输出该日志信息所耗费的毫秒数
%t 输出产生该日志事件的线程名


在这里我提供简单的log4j的配置文件,如下:
log4j.rootLogger=DEBUG, A1, A2, A3
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.lay.ConversionPattern=%d{yyyy-MM-dd hh:mm:ss}:%p %t %l - %m%n

#定义A2输出到文件
log4j.appender.A2 = org.apache.log4j.RollingFileAppender
#定义A2要输出到哪一个文件
log4j.appender.A2.File = D:\\work\\workspace_study\\testPaserXML_Project\\example.log
#定义A2的输出文件的最大长度
log4j.appender.A2.MaxFileSize = 1024KB
#定义A2的备份文件数
log4j.appender.A2.MaxBackupIndex = 3
#定义A2的布局模式为PatternLayout
log4j.appender.A2.layout = org.apache.log4j.PatternLayout
#定义A2的输出格式
log4j.appender.A2.layout.ConversionPattern = %d{yyyy-MM-dd hh:mm:ss}:%p %t %l - %m%n

#定义A3输出到数据库
log4j.appender.A3 = org.apache.log4j.jdbc.JDBCAppender
#定义A3日志信息数的缓存大小,当有10条日志记录时才一次性输出到数据库
log4j.appender.A3.BufferSize = 10
#定义A3与数据库的连接信息
log4j.appender.A3.Driver = oracle.jdbc.driver.OracleDriver
log4j.appender.A3.URL = jdbc:oracle:thin:@127.0.0.1:1521:myoracle
log4j.appender.A3.User = system
log4j.appender.A3.Password = root
#定义A3的布局模式
log4j.appender.A3.layout = org.apache.log4j.PatternLayout
#定义A3的日志信息输出到具体的数据库表 ( 数据库中必须存在该结构的表 )
log4j.appender.A3.sql = insert into mylogdb(logid, logtime, loglevel, logthread, logaddress, logmsg) values(mylogsequence.nextval, to_date('%d{yyyy-MM-dd hh:mm:ss}', 'yyyy-MM-dd hh24:mi:ss'), '%p', '%t', '%l', '%m')


二:Web应用系统中log4j的初始化
Log4j需要进行初始化才可以使用,但不可能在每次调用logger时都进行初始化的工作,所以在Web应用系统中我可以把log4j的初始化工作放到servlet中从而独立出来,而该servlet我们只需在Web应该系统中的web.xml进行配置,让log4j在系统启动时就进行初始化工作,这样我们就可以在任何地方都可以调用logger进行日志输出了。

该servlet的实例如下:
public class Log4jInit extends HttpServlet {
private static Logger logger = Logger.getLogger(Log4jInit.class.getName());
public void init(){
String file = getInitParameter("log4j-init-file");
if(file != null){
PropertyConfigurator.configure(file);
}
testDebug();
testInfo();
testWarning();
testError();
}

public static void testDebug(){
logger.debug("testDebug...");
}
public static void testInfo(){
logger.info("testInfo...");
}
public static void testWarning(){
logger.warn("testWarn...");
}
public static void testError(){
logger.error("testError...");
}
}


Web.xml的配置部分如下:
<servlet>
<servlet-name>log4j-init</servlet-name>
<servlet-class>clou.Log4jInit</servlet-class>
<init-param>
<param-name>log4j-init-file</param-name> <param-value>D:/work/workspace_study/testIbatis/WebRoot/WEB-INF/log4j.properties</param-value>
</init-param>
<!-- 因为log4j初始化要在所有调用log4j之前完成,为了让该servlet先启动执行,所以这里设为1-->
<load-on-startup>1</load-on-startup>
</servlet>


三:Web应用系统动态加载修改的log4j配置文件
因为我是个小菜,依我的理解是在web应该系统中,一旦修改了配置文件,需要重新启动该系统服务才能使修改后的配置文件生效,但现实中我们的应用系统一旦正常投入使用就不可能随便重启服务,那我们修改了log4j的配置信息又怎么让它生效呢,于是我查阅了资料,采用了Spring中提供的log4j监听器,可以很好的解决这个问题。 我相信肯定还有很多其他方法可以解决该问题,大家也可以拿出来交流。
采用Spring提供的log4j监听器,我们只需在web.xml上配置相关信息就可以实现了,而不需要做其他工作,是不是很简单,呵呵。  具体如下:
<!--由Sprng载入的Log4j配置文件位置-->
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>/WEB-INF/log4j.properties</param-value>
<!--在这里定位配置文件,需要的是从root开始的绝对路径-->
</context-param>

<!--Spring默认刷新Log4j配置文件的间隔,单位为millisecond-->
<context-param>
<param-name>log4jRefreshInterval</param-name>
<param-value>60000</param-value>
</context-param>

<!--Spring log4j 监听器-->
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics