Log4j使用方法
1、定义配置文件 log4j.properties
①配置根Logger,其语法为:log4j.rootLogger = [ level ] , appenderName, appenderName, …
level 是日志记录的优先级,分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者自定义的级别。
Log4j建议只使用四个级别,优先级从高到低分别是ERROR、WARN、INFO、DEBUG
②配置日志信息输出目的地Appender,其语法为:log4j.appender.appenderName = fully.qualified.name.of.appender.class
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提供的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)
在Spring的项目中配置Log4j
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
这里webAppRootKey代表你的项目名
log4j.properties文件放在WEB-INF下
在Web.xml中配置语句如下:
1 <!--如果不设,默认为web.root,但最好设置,以免项目间冲突 --> 2 <context-param> 3 <param-name>webAppRootKey</param-name> 4 <param-value>myappfuse.root</param-value> 5 </context-param> 6 <context-param> 7 <param-name>log4jConfigLocation</param-name> 8 <param-value>/WEB-INF/classes/log4j.properties</param-value> 9 </context-param> 10 <listener> 11 <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class> 12 </listener> 13 <!--这里配置了一个listener,也可以配置servlet --> 14 <servlet> 15 <servlet-name>log4j</servlet-name> 16 <servlet-class> 17 org.springframework.web.util.Log4jConfigServlet 18 </servlet-class> 19 <load-on-startup>1</load-on-startup> 20 </servlet>
SAMPLE 1:
- log4j.rootCategory=INFO, stdout , R
- log4j.appender.stdout=org.apache.log4j.ConsoleAppender
- log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
- log4j.appender.stdout.layout.ConversionPattern=%d-[HL] %p %t %c - %m%n
- log4j.appender.R=org.apache.log4j.DailyRollingFileAppender
- log4j.appender.R.File=${webName.root}/WEB-INF/logs/log.log
- log4j.appender.R.layout=org.apache.log4j.PatternLayout
- log4j.appender.R=org.apache.log4j.DailyRollingFileAppender
- log4j.appender.R.DatePattern ='.'yyyy-MM-dd
- log4j.appender.R.layout.ConversionPattern=%d-[HL] %p %t %c - %m%n
- log4j.logger.org.springframework=DEBUG
- log4j.logger.com.ibatis.db=WARN
- log4j.logger.org.hibernate=DEBUG
- log4j.logger.org.hibernate.ps.PreparedStatementCache=WARN
- log4j.logger.com.myproject=DEBUG
该配置是每天产生1个log文件
log4j.logger.org.springframework=DEBUG
log4j.logger.com.ibatis.db=WARN
log4j.logger.org.hibernate=DEBUG
log4j.logger.org.hibernate.ps.PreparedStatementCache=WARN
这里可以更详细的用日志来显示spring hibernate/ibatis 运行情况!可以通过该日志看到每个查询的list中每个对象数据。
SAMPLE2: 非web 项目,可配置log4j.properties文件位置
PropertyConfigurator.configure(".\\src\\log4j.properties")
也可以静态加载:
static
{
PropertyConfigurator.configure("c://workspace//log4j.properties");
System.setProperty("env", "dev1");
}