项目中使用log4j进行日志输出,用log4j.properties进行了配置,junit测试可以正常的看到log输出,但发布到tomcat后,在控制台及log文件中均没有看到输出,当时没有在意,这几天要跟踪一下一个问题,才重视起来,找了半天资料没发现原因,郁闷。
后来发现,使用了一个叫jxl的jar包,里面有一个log4j.xml,所有日志都输出到jxl.log的文件中去了,马上创建了一个log4j.xml,放到WEB-INF/classes目录下,正常的看到了log输出。
原来log4j也有潜规则:
如果在classpath中发现了log4j.xml配置文件,log4j将不再尝试加载log4j.properties配置。
怎么配置log4j.properties才能将同一包中的error和debug级别的日志分别记到两个文件中去?
我的日志级别是debug,执照下面的配置,会将debug和error日志都输入到一文件中去
由于debug日志非常多,使得error日志比较难找,怎样配置才可以将com.demo.key.ftp输出的日志按级别输出到不同的文件中去呢?
log4j.logger.com.demo.key.ftp=DEBUG, file
下面是简介:
首先,log4j的配置有两种方式一种是使用properties文件,一种是使用xml文件。一般看你的习惯了,我是喜欢使用xml文件的。基本配置的主要内容分为二大块,一块是appender你可以认为是输出方式,一块是Logger就是日志记录器。
appender常用的有输出到控制台的、输出到文件的、输出到数据库的,以及输出到某个socket的。每个appender需要设置它的输出格式也就是layout。layout也有许多种,我经常使用XMLLayout,主要是我喜欢用log4j自带的chainsaw这个工具来查看日志,这个工具只能查看XML格式的文档。如果不用这个工具,那一般就会使用PatternLayout,然后设置ConversionPattern即具体的输出格式。
logger是用来区分不同的日志记录器的。log4j中最高的级别是root,自己定义的级别都是root的子logger。每个logger 都可以指定appender,如果没有指定就按照其父logger的appender来输出。举个例子:net.example,如果没有指定它的 appender则它会去找net的appender,如果net也没有指定就按照root的来。所以,一般来说你需要指定root的appender,不然如果你没有为某一特定category的logger指定appender就会显示log4j初始化出错。此外logger的设置中还需要指定需要输出的日志级别,日志级别有info,warn,error,debug,fatal等,你也可以定义自己的级别。
在配置文件中完成后,需要将log4j.jar和log4j.xml(log4j.properties)放在类路径上,这样会起作用。下面是一个log4j.xml的例子。
Java代码
1. <?xml version="1.0" encoding="UTF-8" ?>
2. <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
3. <log4j:configuration debug="true"
4. xmlns:log4j='http://jakarta.apache.org/log4j/'>
5.
6. <appender name="CON" class="org.apache.log4j.FileAppender">
7. <param name="Threshold" value="INFO"/>
8. <param name="File" value="C:/Documents and Settings/xujin/My Documents/logs/system.log"/>
9. <layout class="org.apache.log4j.xml.XMLLayout"/>
10.
11. </appender>
12.
13. <appender name="HIBERNATE" class="org.apache.log4j.FileAppender">
14. <param name="File" value="C:/Documents and Settings/xujin/My Documents/logs/hibernate.log"/>
15. <layout class="org.apache.log4j.xml.XMLLayout"/>
16. </appender>
17.
18. <appender name="CIPEJB" class="org.apache.log4j.FileAppender">
19. <param name="File" value="C:/Documents and Settings/xujin/My Documents/logs/cipejb.log"/>
20. <layout class="org.apache.log4j.xml.XMLLayout"/>
21. </appender>
22.
23. <logger name="net.sf.hibernate">
24. <level value="INFO"/>
25. <appender-ref ref="HIBERNATE" />
26. </logger>
27.
28. <logger name="com.up.cip.ejb">
29. <level value="INFO"/>
30. <appender-ref ref="CIPEJB" />
31. </logger>
32.
33.
34. <root>
35. <level value ="INFO" />
36. <appender-ref ref="CON" />
37. </root>
38. </log4j:configuration>
1。不需要在web.xml中写。只要保证你的log4.xml和log4j.jar都在类路经上就行了。
2。使用时只要在程序中写如下代码
Logger logger=Logger.getLogger(com.yourcompany);就得到了一个名为 com.yourcompany的logger,然后记录时就调用类似logger.warn(logString)就行了。
后来发现,使用了一个叫jxl的jar包,里面有一个log4j.xml,所有日志都输出到jxl.log的文件中去了,马上创建了一个log4j.xml,放到WEB-INF/classes目录下,正常的看到了log输出。
原来log4j也有潜规则:
如果在classpath中发现了log4j.xml配置文件,log4j将不再尝试加载log4j.properties配置。
怎么配置log4j.properties才能将同一包中的error和debug级别的日志分别记到两个文件中去?
我的日志级别是debug,执照下面的配置,会将debug和error日志都输入到一文件中去
由于debug日志非常多,使得error日志比较难找,怎样配置才可以将com.demo.key.ftp输出的日志按级别输出到不同的文件中去呢?
log4j.logger.com.demo.key.ftp=DEBUG, file
下面是简介:
首先,log4j的配置有两种方式一种是使用properties文件,一种是使用xml文件。一般看你的习惯了,我是喜欢使用xml文件的。基本配置的主要内容分为二大块,一块是appender你可以认为是输出方式,一块是Logger就是日志记录器。
appender常用的有输出到控制台的、输出到文件的、输出到数据库的,以及输出到某个socket的。每个appender需要设置它的输出格式也就是layout。layout也有许多种,我经常使用XMLLayout,主要是我喜欢用log4j自带的chainsaw这个工具来查看日志,这个工具只能查看XML格式的文档。如果不用这个工具,那一般就会使用PatternLayout,然后设置ConversionPattern即具体的输出格式。
logger是用来区分不同的日志记录器的。log4j中最高的级别是root,自己定义的级别都是root的子logger。每个logger 都可以指定appender,如果没有指定就按照其父logger的appender来输出。举个例子:net.example,如果没有指定它的 appender则它会去找net的appender,如果net也没有指定就按照root的来。所以,一般来说你需要指定root的appender,不然如果你没有为某一特定category的logger指定appender就会显示log4j初始化出错。此外logger的设置中还需要指定需要输出的日志级别,日志级别有info,warn,error,debug,fatal等,你也可以定义自己的级别。
在配置文件中完成后,需要将log4j.jar和log4j.xml(log4j.properties)放在类路径上,这样会起作用。下面是一个log4j.xml的例子。
Java代码
1. <?xml version="1.0" encoding="UTF-8" ?>
2. <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
3. <log4j:configuration debug="true"
4. xmlns:log4j='http://jakarta.apache.org/log4j/'>
5.
6. <appender name="CON" class="org.apache.log4j.FileAppender">
7. <param name="Threshold" value="INFO"/>
8. <param name="File" value="C:/Documents and Settings/xujin/My Documents/logs/system.log"/>
9. <layout class="org.apache.log4j.xml.XMLLayout"/>
10.
11. </appender>
12.
13. <appender name="HIBERNATE" class="org.apache.log4j.FileAppender">
14. <param name="File" value="C:/Documents and Settings/xujin/My Documents/logs/hibernate.log"/>
15. <layout class="org.apache.log4j.xml.XMLLayout"/>
16. </appender>
17.
18. <appender name="CIPEJB" class="org.apache.log4j.FileAppender">
19. <param name="File" value="C:/Documents and Settings/xujin/My Documents/logs/cipejb.log"/>
20. <layout class="org.apache.log4j.xml.XMLLayout"/>
21. </appender>
22.
23. <logger name="net.sf.hibernate">
24. <level value="INFO"/>
25. <appender-ref ref="HIBERNATE" />
26. </logger>
27.
28. <logger name="com.up.cip.ejb">
29. <level value="INFO"/>
30. <appender-ref ref="CIPEJB" />
31. </logger>
32.
33.
34. <root>
35. <level value ="INFO" />
36. <appender-ref ref="CON" />
37. </root>
38. </log4j:configuration>
1。不需要在web.xml中写。只要保证你的log4.xml和log4j.jar都在类路经上就行了。
2。使用时只要在程序中写如下代码
Logger logger=Logger.getLogger(com.yourcompany);就得到了一个名为 com.yourcompany的logger,然后记录时就调用类似logger.warn(logString)就行了。