log4j的properties配置-输出日志到指定的文件中

时间:2022-12-22 19:20:22

首先先了解下log4j相关的内容:

输出级别的种类

[javascript]  view plain  copy
  1. OFF     为最高等级 关闭了日志信息    
  2. FATAL   为可能导致应用中止的严重事件错误    
  3. ERROR   为严重错误 主要是程序的错误    
  4. WARN    为一般警告,比如session丢失    
  5. INFO    为一般要显示的信息,比如登录登出    
  6. DEBUG   为程序的调试信息    
  7. TRACE   为比DEBUG更细粒度的事件信息    
  8. ALL     为最低等级,将打开所有级别的日志   

配置日志信息输出目的地

[javascript]  view plain  copy
  1. 1.org.apache.log4j.ConsoleAppender(控制台)    
  2. 2.org.apache.log4j.FileAppender(文件)    
  3. 3.org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)    
  4. 4.org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)    
  5. 5.org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)  

配置日志信息的格式

[javascript]  view plain  copy
  1. 1.org.apache.log4j.HTMLLayout(以HTML表格形式布局),    
  2. 2.org.apache.log4j.PatternLayout(可以灵活地指定布局模式),    
  3. 3.org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),    
  4. 4.org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)  

日志信息格式中几个符号所代表的含义:

[javascript]  view plain  copy
  1. -X号: X信息输出时左对齐;    
  2. %p: 输出日志信息优先级,即DEBUG,INFO,WARN,ERROR,FATAL,    
  3. %d: 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日 22:10:28,921    
  4. %r: 输出自应用启动到输出该log信息耗费的毫秒数    
  5. %c: 输出日志信息所属的类目,通常就是所在类的全名    
  6. %t: 输出产生该日志事件的线程名    
  7. %l: 输出日志事件的发生位置,相当于%C.%M(%F:%L)的组合,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main (TestLog4.java:10)    
  8. %x: 输出和当前线程相关联的NDC(嵌套诊断环境),尤其用到像java servlets这样的多客户多线程的应用中。    
  9. %%: 输出一个"%"字符    
  10. %F: 输出日志消息产生时所在的文件名称    
  11. %L: 输出代码中的行号    
  12. %m: 输出代码中指定的消息,产生的日志具体信息    
  13. %n: 输出一个回车换行符,Windows平台为"/r/n",Unix平台为"/n"输出日志信息换行    
  14. 可以在%与模式字符之间加上修饰符来控制其最小宽度、最大宽度、和文本的对齐方式。如:    
  15. 1)%20c:指定输出category的名称,最小的宽度是20,如果category的名称小于20的话,默认的情况下右对齐。    
  16. 2)%-20c:指定输出category的名称,最小的宽度是20,如果category的名称小于20的话,"-"号指定左对齐。    
  17. 3)%.30c:指定输出category的名称,最大的宽度是30,如果category的名称大于30的话,就会将左边多出的字符截掉,但小于30的话也不会有空格。    
  18. 4)%20.30c:如果category的名称小于20就补空格,并且右对齐,如果其名称长于30字符,就从左边较远输出的字符截掉。
错误例子:
#dom4j log
log4j.logger.org.dom4j=DEBUG,dom4j
log4j.additivity.dom4j=false  
log4j.appender.dom4j=org.apache.log4j.DailyRollingFileAppender  
log4j.appender.dom4j.File=d:/logs/dom4j/dom4j.log 
log4j.appender.dom4j.Append=true  
log4j.appender.dom4j.DatePattern='.'yyyy-MM-dd   
log4j.appender.dom4j.layout=org.apache.log4j.PatternLayout  
log4j.appender.dom4j.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss}|%m%n 


private static Log logger = LogFactory.getLog(Dom4j.class);
logger.info();
日志仍会输出至info.log


正确例子:
log4j.logger.WcsLog = info,WCS
#log4j.logger.WcsLog中WcsLog为自己定义的名称,非包名
log4j.appender.WCS = org.apache.log4j.DailyRollingFileAppender
log4j.appender.WCS.File= d:/logs/RWMS/WCS.log
log4j.appender.WCS.Append =true
log4j.appender.WCS.DatePattern=-yyyy-MM-dd'.log'
log4j.appender.WCS.layout=org.apache.log4j.PatternLayout
log4j.appender.WCS.layout.ConversionPattern=[%p] [%d{yyyy-MM-dd HH:mm:ss}] %m%n


//输出直接调用,导包import org.apache.log4j.Logger;

Logger.getLogger("WcsLog").info("succeed: " + message);


Logger.getLogger()LogFactory.getLog()区别:

    1.Logger.getLogger()是使用log4j的方式记录日志;

    2.LogFactory.getLog()则来自apache的common-logging包。

common-logging组件: 
       Jakarta Commons Logging (JCL)提供的是一个日志(Log)接口(interface),同时兼顾轻量级和不依赖于具体的日志实现工具。它提供给中间件/日志工具开发者一个简单的日志操作抽象,允许程序开发人员使用不同的具体日志实现工具。了解包里情况,可以查看它的API文档:http://www.oschina.net/uploads/doc/commons-logging-1.1.1/index.html , 其中Log(基本记录器)和LogFactory(负责创建Log实例)是两个基类。该API直接提供对下列底层日志记录工具的支持:Jdk14Logger,Log4JLogger,LogKitLogger,NoOpLogger (直接丢弃所有日志信息),还有一个SimpleLog。 有必要详细说明一下调用LogFactory.getLog()时发生的事情。调用该函数会启动一个发现过程,即找出必需的底层日志记录功能的实现,具体的发现过程在下面列出:  ( 换句话说就是, 有这么多工具,common-logging该使用哪一个呢?这取决于系统的设置,common-logging将按以下顺序决定使用哪个日志记录工具:)

        (1).common-logging首先在CLASSPATH中查找commons-logging.properties文件。这个属性文件至少定义org.apache.commons.logging.Log属性,它的值应该是上述任意Log接口实现的完整限定名称。如果找到 org.apache.commons.logging.Log属相,则使用该属相对应的日志组件。结束发现过程。

        (2).如果上面的步骤失败(文件不存在或属相不存在),common-logging接着检查系统属性org.apache.commons.logging.Log。如果找到org.apache.commons.logging.Log系统属性,则使用该系统属性对应的日志组件。结束发现过程。
        (3).如果找不到org.apache.commons.logging.Log系统属性,common-logging接着在CLASSPATH中寻找log4j的类。如果找到了就假定应用要使用的是log4j。不过这时log4j本身的属性仍要通过log4j.properties文件正确配置。结束发现过程。
        (4).如果上述查找均不能找到适当的Logging API,但应用程序正运行在JRE 1.4或更高版本上,则默认使用JRE 1.4的日志记录功能。结束发现过程。
        (5).最后,如果上述操作都失败(JRE 版本也低于1.4),则应用将使用内建的SimpleLog。SimpleLog把所有日志信息直接输出到System.err。结束发现过程。

        为了简化配置 commons-logging ,一般不使用 commons-logging 的配置文件,也不设置与 commons-logging 相关的系统环境变量,而只需将 Log4j 的 Jar 包放置到 classpash 中就可以了。这样就很简单地完成了 commons-logging 与 Log4j 的融合。

        根据不同的性质,日志信息通常被分成不同的级别,从低到高依次是:“调试( DEBUG )”“信息( INFO )”“警告( WARN )”“错误(ERROR )”“致命错误( FATAL )”。

   举例说明:

   基于common-logging的运行方式:

Java代码    log4j的properties配置-输出日志到指定的文件中
  1. package org;   
  2. import org.apache.commons.logging.Log;   
  3. import org.apache.log4j.Logger;   
  4. public class Test extends TagSupport{   
  5. public static Log log=LogFactory.getLog(Test.class);   
  6. public static void test()   
  7. {   
  8. log.debug("111");   
  9. log.info("125");   
  10. log.warn("485");   
  11. log.error("error");   
  12.   
  13. }   
  14. public static void main(String[] a)   
  15. {   
  16. Test.test();   
  17. }   
  18. }   

 

   基于log4j的运行方式

Java代码    log4j的properties配置-输出日志到指定的文件中
  1. import org.apache.log4j.Logger;   
  2. import org.apache.log4j.PropertyConfigurator;   
  3. public class TestLog4j {   
  4.   
  5. static Logger logger = Logger.getLogger(TestLog4j.class);   
  6.    public static void main(String args[]) {   
  7.    PropertyConfigurator.configure("log4j.properties");   
  8.    logger.debug("Here is some DEBUG");   
  9.    logger.info("Here is some INFO");   
  10.       logger.warn("Here is some WARN");   
  11.       logger.error("Here is some ERROR");   
  12.       logger.fatal("Here is some FATAL");   
  13.    }   
  14. }