.Log4j的使用和怎么在spring中集成log4j 【转】
转自:http://shuiranyue.blog.163.com/blog/static/42199034200810261307771/
?
log4j简介简单的说log4j就是帮助开发人员进行日志输出管理的API类库。它最重要的特点就可以配置文件灵活的设置日志信息的优先级、日志信息的输出目的地以及日志信息的输出格式。
log4j.appender.appenderName?=?fully.qualified.name.of.appender.class?
log4j.appender.appenderName.option1?=?value1?
…?
log4j.appender.appenderName.option?=?valueN?
其中,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函数的打印格式格式化日志信息,打印参数如下:?%m?输出代码中指定的消息
%p?输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL?
%r?输出自应用启动到输出该log信息耗费的毫秒数?
%c?输出所属的类目,通常就是所在类的全名?
%t?输出产生该日志事件的线程名?
%n?输出一个回车换行符,Windows平台为“ ”,Unix平台为“ ”?
%d?输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d...{yyy?MMM?dd?HH:mm:ss,SSS},输出类似:2002年10月18日?22:10:28,921?
%l?输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(TestLog4.java:10)?
Logger.debug?(?Object?message?)?;
Logger.info?(?Object?message?)?;
Logger.warn?(?Object?message?)?;
Logger.error?(?Object?message?)?;log4j范例程序下面将使用一个最简单的范例程序来进一步说明log4j的使用方法。程序代码如下:?
import?org.apache.log4j.*;
?
public?class?LogTest?...{
?
?
????static?Logger?logger?=?Logger.getLogger(LogTest.class.getName());
?
????public?static?void?main(String[]?args)?...{
?
????????PropertyConfigurator.configure?(?“.\srclog4j.properties”);
logger.debug("Debug?...");
?
????????logger.info("Info?...");
?
????????logger.warn("Warn?...");
?
????????logger.error("Error?...");
?
????}
}
1.在classpath的根目录下面不放置log4j.properties
在用junit本地测试的时候会提示:
log4j:WARN No appenders could be found for logger (org.springframework.beans.factory.access.SingletonBeanFactoryLocator).
log4j:WARN Please initialize the log4j system properly.
然后我们是看不到spring加载bean的配置信息的。
在classpath路径下加入:log4j.properties,则能够显示bean的加载信息
2. 在web应用中为Spring配置log4j
Spring的做法是使用一个Servlet Listener,在Web Container启动时把ROOT的绝对路径写到系统变量里,这样log4j的配置文件里就可以用${myAppfuse.root}来表示刚刚设进去的系统变量:log4j.appender.logfile.File=${myAppfuse.root}/logs/mylog.log
在Web.xml中配置语句如下:
?
<!--如果不设,默认为web.root,但最好设置,以免项目间冲突-->
<context-param>?????
?<param-name>webAppRootKey</param-name>??????
?<param-value>myappfuse.root</param-value>?
</context-param>
<context-param>???
?<param-name>log4jConfigLocation</param-name>???
?<param-value>/WEB-INF/classes/log4j.properties</param-value>
</context-param>
<listener>???
?<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>?
<!--这里配置了一个listener,也可以配置servlet:-->
<servlet>
??<servlet-name>log4j</servlet-name>
??<servlet-class>
???org.springframework.web.util.Log4jConfigServlet
??</servlet-class>
??<load-on-startup>1</load-on-startup>
?</servlet>
配置好了以后我们就可以在当前应用的logs目录下找到日志记录文件:mylog.log
属性log4jConfigLocation的值建议还是设置为:/WEB-INF/classes/log4j.properties,这样我们在不启动web应用的时候,做一些测试这能够正确地记录日志信息