log4j

    项目中使用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)就行了。

你可能感兴趣的:(tomcat,log4j,xml,.net,JUnit)