随笔-126  评论-247  文章-5  trackbacks-0

Log4j ( Log for Java ) 是 Apache 下的一个开源项目,通过 Log4j,可以将程序运行的信息输送到指定的目的地。这个目的地可以是控制台、文件、邮箱等。

Log4j 支持两种格式的文件配置,即 properties 和 xml 两种格式的文件。下面将要介绍的是采用 properties 格式的配置。

 log4j.properties 配置示例  


log4j.rootLogger
= INFO, logOutput

log4j.appender.logOutput = org.apache.log4j.FileAppender

log4j.appender.logOutput.file = src/main/resources/log/demoLog.log

log4j.appender.logOutput.layout = org.apache.log4j.PatternLayout

log4j.appender.logOutput.layout.conversionPattern = %n%n%d{yyyy-MM-dd HH:mm:ss}%n%p  %c  %L%n%m



① [ 配置日志级别和输出源 ]

      log4j.rootLogger = 级别,输出源1,输出源2 … …

     日志信息优先级别 :  ALL < TRACE < DEBUG < INFO < WARN < ERROR < FATAL < OFF

     常用优先级别 : DEBUG < INFO < WARN < ERROR

         - DEBUG : 程序的调试信息

         - INFO  :  程序的一般信息,例如,用户的登录、登出,方法执行成功信息等

         - WARN :  程序的警告信息

         - ERROR :  程序的严重错误信息,例如,程序的执行抛出异常

         Tips : 只有当日志信息的优先级别大于等于配置的日志信息级别,日志信息才会被记录到日志。

     日志输出源 : 

         - 日志输出源的个数可以是一个,也可以是多个,多个输出源的时候,输出源与输出源之间用逗号分隔

         - 日志输出源的名字可以根据需要,自定义起名

② [ 指定输出源辅助类 ]

      log4j.appender.输出源名称 = Appender.class

      常用的 Appender ( 在 log4j-version.jar 的 org.apache.log4j 包下 ) : 

      1. org.apache.log4j.FileAppender(文件)

      2. org.apache.log4j.ConsoleAppender(控制台)

      3. org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)

      4. org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)

③ [ 指定输出源文件存放路径 ]

      log4j.appender.输出源名称.file = path ( 日志具体存放路径 )

④ [ 指定输出源文件的格式布局 ]

      log4j.appender.输出源名称.layout = Layout.class

     常用的 Layout ( 在 log4j-version.jar 的 org.apache.log4j 包下 ) : 

     1. org.apache.log4j.SimpleLayout  ( 简单的布局方式,含日志信息的级别和信息 )

     2. org.apache.log4j.PatternLayout  ( 可自定义的布局模式 )

     3. org.apache.log4j.HTMLLayout   ( 以 HTML 方式布局 )

⑤ [ 自定义布局模式,可选 ]

      log4j.appender.输出源名称.layout.conversionPattern

     %p : 输出日志信息优先级,即DEBUG,INFO,WARN,ERROR,FATAL …

     %d : 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,例如:%d{yyy-MMM-dd HH:mm:ss},输出类似:2012-10-10 12:20:18 

     %r : 输出自应用启动到输出该log信息耗费的毫秒数

     %c : 输出日志信息所属的类,通常就是所在类的全名

     %t : 输出产生该日志事件的线程名

     %l : 输出日志事件的发生位置

     %x : 输出和当前线程相关联的信息

     %% : 输出一个"%"字符

     %F : 输出日志消息产生时所在的文件名称

     %L : 输出代码中的行号

     %m : 输出代码中指定的消息,产生的日志具体信息

     %n : 换行


环境  :  JDK 1.6,Eclipse 3.6,Maven  3.0.4,log4j 1.2.16,mail 1.4.4

项目结构 :



 pom.xml 部分清单   

<!-- log4j -->

<dependency>

 <groupId>log4j</groupId>

 <artifactId>log4j</artifactId>

 <version>1.2.16</version>

</dependency>

<!-- java mail -->

<dependency>

 <groupId>javax.mail</groupId>

 <artifactId>mail</artifactId>

 <version>1.4.4</version>

</dependency>
 

 
注 : 此处配置 pom.xml 是使用 maven 来管理 jar 包,如果你没有使用 maven,则需手动导入相关 jar 包。

 log4j.properties 清单   

log4j.rootLogger = INFO, logOutput, htmlOutput, console

# Txt log

log4j.appender.logOutput = org.apache.log4j.FileAppender

log4j.appender.logOutput.file =  src/main/resources/log/demoLog.log

log4j.appender.logOutput.layout = org.apache.log4j.PatternLayout

log4j.appender.logOutput.layout.conversionPattern =  %n%n%d{yyyy-MM-dd HH:mm:ss}%n%p %c %L%n%m

# Html log

log4j.appender.htmlOutput = org.apache.log4j.FileAppender

log4j.appender.htmlOutput.file = D:/fancydeepin/log/demoLog.html

log4j.appender.htmlOutput.layout = org.apache.log4j.HTMLLayout

# Console log

log4j.appender.console = org.apache.log4j.ConsoleAppender

log4j.appender.console.target = System.out

log4j.appender.console.layout = org.apache.log4j.PatternLayout

log4j.appender.console.layout.conversionPattern =  %d{yyyy-MM-dd HH:mm:ss}%n%p %c   %L%n%m%n

# Email log

#log4j.appender.mail = org.apache.log4j.net.SMTPAppender

#log4j.appender.mail.Threshold = ERROR

#log4j.appender.mail.BufferSize = 512

#log4j.appender.mail.SMTPHost = smtp.yeah.net

#log4j.appender.mail.Subject = Log4J Message

#log4j.appender.mail.From = fancydeepin@yeah.net

#log4j.appender.mail.To = fancydeepin@yeah.net

#log4j.appender.mail.SMTPAuth = true

#log4j.appender.mail.SMTPUsername = username

#log4j.appender.mail.SMTPPassword = password

#log4j.appender.mail.Encoding = GBK

#log4j.appender.mail.layout = org.apache.log4j.PatternLayout

#log4j.appender.mail.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss}%n%p %c %L%n%m

 

 

 测试代码   

package test;

import java.util.Random;

import org.apache.log4j.Logger;

public class TestApp {

   private static Logger log = Logger.getLogger(TestApp.class);


  
public static void main(String[] args){

      try {

         Random randomException = new Random();

         Object result = 10 / randomException.nextInt(2);

         log.info("Method execute successfully.\nThe result is " + result);

      } catch (Exception e) {

         log.error(e);

      }

   }

}

 

 demoLog.log 部分信息   

2012-10-10 12:39:11

ERROR test.TestApp 17

java.lang.ArithmeticException: / by zero

 

2012-10-10 12:39:13

INFO test.TestApp 15

Method execute successfully.

The result is 10

 

2012-10-10 12:39:15

ERROR test.TestApp 17

java.lang.ArithmeticException: / by zero


注 : 如果在 log4j.properties 中配置了日志信息发送到邮箱,即将上面的 log4j.properties 配置中的 # Email log 下面的注释 ( properties 文件中 ' # ' 是行注释  )

全部取消的话,则需要在配置中添加一个输出源,同样的,这个输出源的名称是自定义的,在这里,如果我去掉注释,则需要多配一个名称叫 mail 的输出源,除此之外,

还需要添加 java 的 mail 的 jar 包,否则,后台将抛出 java.lang.ClassNotFoundException 的异常信息。



  
posted on 2012-10-11 20:12 fancydeepin 阅读(5455) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航: