Log4j文档(转自JavaEye)

Log4j由三个重要的组件构成:日志信息的优先级,日志信息的输出目的地,日志信息的输出格式。日志信息的优先级从高到低有ERROR、WARN、 INFO、DEBUG,分别用来指定这条日志信息的重要程度;日志信息的输出目的地指定了日志将打印到控制台还是文件中;而输出格式则控制了日志信息的显 示内容。



一、 定义配置文件

Log4j支持两种配置文件格式,一种是Java特性文件(properties格式的属性文件),一种是XML格式的文件。



1. 以Java特性文件(properties格式的属性文件)做为配置文件

Java特性文件也位于WEB-INF/classes目录下,下面是一个Java特性文件(properties格式的属性文件)的例子:
# For JBoss: Avoid to setup log4j outside $JBOSS_HOME / server / default / deploy / log4j.xml  

# For all other servers: Comment out the Log4J listener in web.xml too  

log4j.configuration
= log4j.properties  
   
log4j.rootCategory
= info, stdout, logfile  
   
log4j.appender.stdout
= org.apache.log4j.ConsoleAppender  
  
log4j.appender.stdout.layout
= org.apache.log4j.PatternLayout  
  
log4j.appender.stdout.layout.ConversionPattern
=% % p [ % c]  -   <% m >% n  

log4j.appender.logfile
= org.apache.log4j.RollingFileAppender  

log4j.appender.logfile.File
= D: / temp / SpringMVC.log  
 
log4j.appender.logfile.MaxFileSize
= 512KB  

# Keep three backup files  
 
log4j.appender.logfile.MaxBackupIndex
= 3   
  
log4j.appender.logfile.layout
= org.apache.log4j.PatternLayout  
 
# Pattern to output: date priority [category] 
-   < message > line_separator  

og4j.appender.logfile.layout.ConversionPattern
=% % p [ % c]  -   <% m >% n  
 
 

#log4j.logger.com.opensymphony.oscache
= ERROR  
 
#log4j.logger.net.sf.navigator
= ERROR  
 
#log4j.logger.org.apache.commons
= ERROR  
 
#log4j.logger.org.apache.struts
= WARN  
 
#log4j.logger.org.displaytag
= ERROR  
 
log4j.logger.org.springframework
= WARN  

#log4j.logger.com.ibatis.db
= WARN  
  当Tomcat服务器启动时自动加载.properties配置文件。

其中,

log4j.configuration=log4j.properties 是指定配置文件的名字。

log4j.rootCategory= [ level ] , appenderName, appenderName, … 是配置根Logger。


level 是日志记录的优先级,分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者您定义的级别。Log4j建议只使用四个级别,优 先级从高到低分别是ERROR、WARN、INFO、DEBUG。通过在这里定义的级别,您可以控制到应用程序中相应级别的日志信息的开关。比如在这里定 义了INFO级别,则应用程序中所有DEBUG级别的日志信息将不被打印出来,默认日志级别是ERROR;appenderName就是指定 Appender组件,确定日志输出目的地。如上例:log4j.rootCategory=info, stdout, logfile 配置根Logger的级别是INFO,日志输出的目的地是stdout, logfile。




log4j.appender. appenderName =org.apache.log4j.ConsoleAppender是配置日志信息输出目的地Appender。


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=org.apache.log4j.PatternLayout 配置日志信息的格式(布局)


Log4j提供的layout有以下几种:
  org.apache.log4j.HTMLLayout(以HTML表格形式布局),
  org.apache.log4j.PatternLayout(可以灵活地指定布局模式),
  org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),
  org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)




log4j.appender. appenderName.layout.ConversionPattern=%d %p [%c] - <%m>%n 是设置打印格式格式化日志信息。


打印参数如下:

%m 输出代码中指定的消息

%p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL
%r 输出自应用启动到输出该log信息耗费的毫秒数
%c 输出所属的类目,通常就是所在类的全名
%t 输出产生该日志事件的线程名
%n 输出一个回车换行符,Windows平台为“/r/n”,Unix平台为“/n”
%d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日 22:10:28,921
%l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(TestLog4.java:10)




如果log4j.appender. appenderName 属性配置的日志输出目的地是一个文件是,还有以下属性:


log4j.appender. appenderName.File=D:/temp/SpringMVC.log 配置日志文件的名称。即存放日志的文件。

log4j.appender. appenderName.MaxFileSize=512KB 配置日志文件的大小,最大可以设置为10M。

log4j.appender. appenderName.MaxBackupIndex=3 配置可有日志文件的个数。




Log4j.logger<.logger.name>= level 指定Logger.name这个记录器的级别。即,logger只输出这个级别或高出这个级别的日志。如:


log4j.logger.org.springframework=WARN 是配置Logger只输出关于org.springframework的WARN级别的日志和ERROR和FATAL级别的日志。

log4j.logger.org.displaytag=ERROR 是配置Logger只输出关于displaytag的ERROR 和FATAL级别的日志。




如果将日志以邮件的形式发送出去时得有以下属性:


log4j.appender.mail=org.apache.log4j.net.SMTPAppender 配置日志输出目的地是电子邮箱

log4j.appender.mail.To= lmbussiness@hotmail.com 设置日志将要输出到的电子邮箱

log4j.appender.mail.From=localhost@raibledesignes.com 设置发送日志信息的电子邮箱

log4j.appender.mail.SMTPHost=localhost 设置运行SMTP守护程序的主机的IP地址名称

log4j.appender.mail.Threshold=ERROR 设置记录日志的最低级别

log4j.appender.mail.BufferSize=1 设置写邮件的缓存大小

log4j.appender.mail.Subject=[localhost]dlhitech Application Error 设置电子邮件标题


如果将日志输出到数据库日志表时有以下属性:


log4j.appender.DATABASE=org.apache.log4j.jdbc.JDBCAppender 配置日志输出目的地是数据库
log4j.appender.DATABASE.URL=jdbc:oracle:thin:@192.168.1.10:1521:SCSORA 配置连接数据库的url
log4j.appender.DATABASE.driver=oracle.jdbc.drivers.OracleDrivers 配置连接数据库的驱动器
log4j.appender.DATABASE.user=newsinfo 配置连接数据库的用户名
log4j.appender.DATABASE.password=newsinfo 配置连接数据库的密码
log4j.appender.DATABASE.sql=INSERT INTO LOG4J (Message) VALUES ('[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n') 设置插入语句
log4j.appender.DATABASE.layout=org.apache.log4j.PatternLayout 配置日志信息的格式(布局)
log4j.appender.DATABASE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n 设置打印格式格式化日志信息。






2.以XML格式的文件作为配置文件

下面是一个XML格式的文件作为配置文件的例子:

<? xml version="1.0" encoding="UTF-8"  ?>   
  
<! DOCTYPE log4j:configuration SYSTEM "log4j.dtd" >   
 
< log4j:configuration  xmlns:log4j ="http://jakarta.apache.org/log4j/" >   
   
           
   
    
< appender  name ="ConsoleAppender"  class ="org.apache.log4j.ConsoleAppender" >   
   
      
< param  name ="threshold"  value ="error" />   
   
      
< layout  class ="org.apache.log4j. PatternLayout" >   
   
        
< param  name ="Conversion"  value ="%d{(yyyy年MM月dd日-HH時mm分ss秒)} %p [%c] - <%m>%n " />   
 
</ layout >   
   
    
</ appender >   
   
      
   
    
< appender  name ="rollingFile.log"  class ="org.apache.log4j.RollingFileAppender" >   
      
< param  name ="File"  value =" D:/temp/SpringMVC.log "   />   
 
< param  name ="threshold"  value ="info" />   
      
< param  name ="Append"  value ="false"   />   
      
< param  name ="MaxBackupIndex"  value ="2"   />   
      
< param  name ="MaxFileSize"  value ="1024"   />   
      
< layout  class ="org.apache.log4j.PatternLayout"   >   
        
< param  name =" ConversionPattern "  value ="%d [%t] %p - %m%n"   />   
      
</ layout >   
     
<!--  实现过滤功能,用这个标签,当往这个指定文件记录日志时只记录指定级别的日志,别的不记录 。  
 Filter标签只能在xml配置文件好用,在.properties属性文件中不好用
-->   
 
< filter  class ="org.apache.log4j.varia.LevelRangeFilter" >   
       
< param  name ="LevelMin"       value ="ERROR" />   
       
< param  name ="LevelMax"       value ="ERROR" />   
       
< param  name ="acceptOnMatch"  value ="TRUE" />   
     
</ filter >   
    
</ appender >   
 
<! —封装apache ,这样,可以在java程序中的  
   
 Category cat2 = Category.getInstance("your.category.name"); 来进行输出日志--
>   
   
 
< category  name ="org.apache" >       --设置封装的名称  
   
 
< priority  value ="info"   />      --输出指定级别的日志  
   
 
< appender-ref  ref ="aplog" />    --设置输出的目的地  
   
 
</ category >   
   
 
< root >   
   
      
< level  value  ="debug"   />   
   
      
< appender-ref  ref ="ConsoleAppender" />   
   
 
< appender-ref  ref =" rollingFile.log " />    <!--   经过过滤只记录error级别的日志   -->   
   
    
</ root >   
  
 
</ log4j:configuration >   
二.调用Log4j来输出日志

通过访问通用日志接口和在java程序手动打开配置文件都可以进行日志的输出。其中,通过访问通用日志接口来指定日志器时,Log4j的配置文件只能是java特定文件(.properties属性文件)。



1.通过访问通用日志接口来输出日志

当Tomcat服务器启动时,通用日志接口从名为“commons-logging.properties”的属性文件中获取实现日志接口日志器信息,这 个文件位于WEB-INF/classes目录下。“commons-logging.properties”属性文件的内容:






org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JCategoryLog




当Tomcat服务器运行时,通用日志接口会检索commons-logging.properties文件,并且实例化由“org.apache.commons.logging.Log”属性指定的日志实现例。上面给的日志器是Log4J日志器。

Tomcat服务器会自动加载.properties配置文件。

调用Log4j输出日志 如下例:
import  org.apache.commons.logging.Log;

   

public   class  Test {

    
public static void main(args[] String){

    Log logger 
= LogFactory.getLog(“test”);

    logger.info(
"开始操作");

    
int a = 5;

    
int b = 6;

    System.out.println(a
+b);

    logger.info(
"操作完毕");

    }


}

 
2.手动打开配置文件输出日志

程序员用手动打开配置文件来输出日志时,得先打开配置文件然后才能进行输出日志操作。由于Log4J的配置文件可以是java特性文件 (.properties属性文件)和.xml文件,所以打开配置文件的方式就不相同。当配置文件是java特性文件(.properties属性文件) 时,打开配置文件的方法是:
PropertyConfigurator.configure ( String configFilename);

当配置文件是.xml文件时,打开配置文件的方法是:

DOMConfigurator.configure ( String filename );
当打开配置文件后,配置文件就一直打开着,所以配置文件就打开一遍就可以了。

打开配置文件后,构造Logger对象然后输出日志信息,以配置文件是.xml文件为例,输出信息实例如下:
import  org.apache.log4j.Logger;

import  org.apache.log4j.xml.DOMConfigurator;   

public   class  Test {

          
public static void main(args[] String){

          DOMConfigurator.configure ( String filename );

          Logger logger 
= Logger.getRootLogger();

          logger.info(
"开始操作");

          
int a = 5;

          
int b = 6;

         System.out.println(a
+b);

         logger.info(
"操作完毕");

         }


}

 
2.不通过配置文件手动输出日志

使用Log4J来输出日志不一定非得通过配置文件来输出日志,也可以不通过配置文件来输出日志,手动在程序中创建Appender、Layout等对象, 只不过这样做会在java程序用留下很大的代码量。下面是一个不通过配置文件手动输出日志的实例,程序实现了PatternLayout和 FileAppender:

import  org.apache.log4j.Level;

import  org.apache.log4j.Logger;

import  org.apache.log4j.SimpleLayout;

import  org.apache.log4j.FileAppender;

public   class  simpandfile  {

         
static Logger logger = Logger.getLogger(simpandfile.class);

         
public static void main(String args[]) {

         String pattern 
=  "Milliseconds since program start: %r %n";

                   pattern 
+= "Classname of caller: %C %n";

                   pattern 
+= "Date in ISO8601 format: %d{ISO8601} %n";

                   pattern 
+= "Location of log event: %l %n";

                   pattern 
+= "Message: %m %n %n"

           PatternLayout layout 
= new PatternLayout(pattern);

           FileAppender appender 
= null;

             
try {

                 appender 
= new FileAppender(layout,"output1.txt",false);

              }
 catch(Exception e) {}

              logger.addAppender(appender);

              logger.setLevel((Level) Level.DEBUG);

              logger.debug(
"Here is some DEBUG");

              logger.info(
"Here is some INFO");

              logger.warn(
"Here is some WARN");

              logger.error(
"Here is some ERROR");

              logger.fatal(
"Here is some FATAL");

        }


}

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值