Log4j和common-logging的使用
2014-09-25 19:01
375 查看
Log4j和common-logging的使用
Log4j和common-logging都是apache下的开源项目,他们的区别和简单使用请参考以下网址。http://touch.javaeye.com/blog/31632
这是篇非常好的文章,我只想给他做一下补充。
补充一:
大家可以看到不管是log4j还是commons-logging,在程序中使用时都需要以下步骤:
1.
初始化,生成静态实例:
commons-logging中是:
<span style="font-family:Microsoft YaHei;font-size:14px;">private static Log log = LogFactory.getLog(TestLog. class ); </span>
log4j中是:
static Logger logger = Logger.getLogger(TestLog4j. class ); PropertyConfigurator.configure( " log4j.properties " );
第二句可以省略,缺省情况下,他会自己找到 log4j.properties。
2. 在程序中使用:
<span style="font-family:Microsoft YaHei;font-size:14px;">logger.debug( " Here is some DEBUG " ); logger.info( " Here is some INFO " ); logger.warn( " Here is some WARN " ); </span>
如果这样做,会在每个程序中生成一个静态实例,如果是比较大的项目,这样做是不妥的。
我们可以在整个应用程序中生成一个实例,也就是初始化一次,在整个应用程序中都使用这个实例。
比如,我们写一个日志初始化类,如下:
<span style="font-family:Microsoft YaHei;font-size:14px;">package myb.hi.core.log; import org.apache.commons.logging.*; public class Logs { private static Log log; /** * Define a static Log variable, */ static{ try{ log=LogFactory.getLog(Logs.class); }catch(Exception ex){ System.out.println("can't init the Logger, caused by: "+ex); } } /** * Get the log object * @return Log */ public static Log getLogger(){ return log; } }</span>
上面代码使用commons-logging生成一个静态log实例,以后的程序就可以这样来做:
<span style="font-family:Microsoft YaHei;font-size:14px;">Logs.getLogger().info("begin Action: UserBaseInfoAction.getSingleUserInfo()"); DBSession.begin(); String fname=userForm.getFname(); userForm=UserBaseInfoBusiness.getSingleUserInfo(DBSession.getSession(),fname); DBSession.commit(); request.setAttribute("userInfo",userForm); Logs.getLogger().info("end Action: UserBaseInfoAction.getSingleUserInfo()");</span>
在需要做记录的地方使用Logs.getLogger()获得这个log实例,然后再调用他的方法(info,debug,error等)。
Log4j的实现方法类似,初始化类可以这样写:
<span style="font-family:Microsoft YaHei;font-size:14px;">package myb.hi.core.log; import org.apache.log4j.Logger; import org.apache.log4j.PropertyConfigurator; public class Logs { private static Logger log logger; /** * Define a static Log variable, */ static{ try{ logger=Logger.getLogger(LogInit.class); //DOMConfigurator.configure("E:/study/log4j/log4j.xml");//加载.xml文件 //PropertyConfigurator.configure("log4j.properties");//加载.properties文件 }catch(Exception ex){ System.out.println("can't init the Logger, caused by: "+ex); } } /** * Get the log object * @return Log */ public static Logger getLogger(){ return logger; } }</span>
应用程序中的调用是完全相同的。
补充二:
log4j.properties文件中,logger定义的日志级别可以和appender的不一样。
在定义logger时,尽量把日志级别往低里写;在appender里定义日志级别时可以按需要来写。
比如,定义一个logger,
log4j.rootLogger = DEBUG, CONSOLE,A1
定义成DEBUG,不管appender怎么定义,肯定有输出。
如果定义成:
log4j.rootLogger = INFO, CONSOLE,A1
定义成INFO,appender的定义必须级别必须比他高才行,如果appender定义成DEBUG,将不会输出。
同样的,在程序中调用logger时,调用的方法级别也必须要比logger定义的级别高,才有输出。
比如,log4j.rootLogger = INFO, CONSOLE,A1
定义成INFO,程序中,Logs.getLogger().info()方法是可以有输出的;Logs.getLogger().debug()方法将不会有任何输出。
补充三:
有关日志文件输出路径。
如果不指定路径,日志文件是输出在运行目录的,也就是应用服务器的bin目录下,
比如下面:
log4j.appender.A1.File = SampleMessages.log4j
假设应用服务器用的是tomcat,那么SampleMessages.log4j文件会在tomcat安装目录的bin子目录下。
为了把日志文件统一存放,请使用绝对路径或相对路径,比如下面:
log4j.appender.A1.File = ../logs/SampleMessages.log4j
这样日志文件将放在tomcat的logs目录内。
相关文章推荐
- log4j和common-logging结合使用
- Log4j和common-logging的使用
- Java使用Log日志系统(common-logging和log4j)
- 使用common-logging与log4j打印日志,发现版本冲突
- 关于使用common-logging 与log4j 总汇
- Common-logging 与 Log4j的结合使用
- Log4j和common-logging的使用
- Java使用Log日志系统(common-logging和log4j)
- Common-logging 与 Log4j的结合使用
- Spring日志 common.logging 和log4j结合使用
- java日志组件:common-logging和log4j的使用说明
- Java使用Log日志系统(common-logging和log4j)
- 使用common-logging与log4j打印日志,发现版本冲突
- Common-logging 与 Log4j的结合使用
- java:log4j学习(2)-转帖:Common-logging 与 Log4j的结合使用
- 使用Slf4j取代Apache Common-Logging编写日志
- Apache通用日志工具commons-logging和Log4j使用总结
- 使用commons-logging和log4j记录日志
- Apache通用日志工具commons-logging和Log4j使用总结
- 使用commons-logging和log4j记录日志[转载]