Log4j

简介

Log4jApache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台

、文件、数据库、甚至是套接口服务器等;用户也可以控制每一条日志的输出格式;

通过定义每一条日志信息的级别,用户能够更加细致地控制日志的生成过程。
  在需要的时候,这些都可以通过一个配置文件来灵活地进行配置,而不需要修改程序代码。

 

安装

· http://jakarta.apache.org/log4j/docs/download.html下载log4j发行版,最新的版本是1.2.11

· 解压存档文件到合适的目录中

· 添加文件 dist/lib/log4j-1.2.11.jar CLASSPATH环境变量中

 

我们关心的问题

对于一个日志处理功能来说,我们主要关心的有3个问题:

谁来记录日志?——Logger

· 如何取得Logger实例?

  1、有很多方法可以创建一个日志记录器(Logger),下面方法可以取回root日志记录器:

Logger logger = Logger.getRootLogger();

  2、还可以这样创建一个新的日志记录器:

Logger logger = Logger.getLogger("LogTest");

  3、比较常用的用法,就是根据类名实例化一个静态的全局日志记录器:

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

· 如何记录日志?

日志级别(Level

对应的记录方法(Logger

FATAL0

log.fatal()

ERROR3

log.error()

WARN4

log.warn()

WARN6

log.info()

DEBUG7

log.debug()

记录到哪里?——Appender

  1ConsoleAppender 使用用户指定的布局(layout) 输出日志事件到System.out或者 System.err。默认的目标是System.out
  2DailyRollingFileAppender 扩展FileAppender,因此多个日志文件可以以一个用户选定的频率进行循环日志记录。
  3FileAppender 把日志事件写入一个文件
  4RollingFileAppender 扩展FileAppender备份容量达到一定大小的日志文件。
  5WriterAppender 根据用户的选择把日志事件写入到Writer或者OutputStream
  6JDBCAppender 把日志事件写入到数据库中。

日志的格式?——Logger

  1HTMLLayout 格式化日志输出为HTML表格。
  2PatternLayout 根据指定的 转换模式格式化日志输出,或者如果没有指定任何转换模式,就使用默认的转换模式。
  3SimpleLayout 以一种非常简单的方式格式化日志输出,它打印级别 Level,然后跟着一个破折号“-“ ,最后才是日志消息。

 

配置文件说明

  log4j之所以简单易用就是它的可配置性,通过将上面的问题23用配置文件来指定,我们的系统就有了强大、近乎完美的日志记录功能!下面是一个配置文件的例子:logconfig.properties

log4j.rootLogger=DEBUG,CONSOLE,A1,im
log4j.addivity.org.apache=true

# 应用于控制台
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.Threshold=DEBUG
log4j.appender.CONSOLE.Target=System.out
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
#log4j.appender.CONSOLE.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[THREAD] n%c[CATEGORY]%n%m[MESSAGE]%n%n

# 应用于文件
log4j.appender.FILE=org.apache.log4j.FileAppender
log4j.appender.FILE.File=file.log
log4j.appender.FILE.Append=false
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n

# 应用于按天产生文件
log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender
log4j.appender.A1.File=SampleMessages.log4j
log4j.appender.A1.DatePattern=yyyyMMdd-HH'.log4j'
log4j.appender.A1.layout=org.apache.log4j.xml.XMLLayout

# 应用于文件回滚
log4j.appender.ROLLING_FILE=org.apache.log4j.RollingFileAppender
log4j.appender.ROLLING_FILE.Threshold=ERROR
log4j.appender.ROLLING_FILE.File=rolling.log
log4j.appender.ROLLING_FILE.Append=true
log4j.appender.ROLLING_FILE.MaxFileSize=10KB
log4j.appender.ROLLING_FILE.MaxBackupIndex=1
log4j.appender.ROLLING_FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.ROLLING_FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n

# 用于数据库
#
说明: 数据库:mysql
#
首先创建一数据库表(LOG4J)说明:
#
字段 描述
# GUID
流水号(自增列)
# DATE
时间
# THREAD
当前线程
# LEVEL
当前级别
# CLASS
当前java程序/方法
# MESSAGE
当前输出信息
log4j.appender.DATABASE=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.DATABASE.URL=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=GBK
log4j.appender.DATABASE.driver=com.mysql.jdbc.Driver
log4j.appender.DATABASE.user=root
log4j.appender.DATABASE.password=
log4j.appender.DATABASE.sql=INSERT INTO LOG4J (DATE,THREAD,LEVEL,CLASS,MESSAGE) VALUES ('%d{yyyy-MM-dd HH:mm:ss}', '%t', '%p', '%l', '%m')
log4j.appender.DATABASE.layout=org.apache.log4j.PatternLayout
log4j.appender.DATABASE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n

# 自定义Appender
log4j.appender.im = net.cybercorlin.util.logger.appender.IMAppender
log4j.appender.im.host = mail.cybercorlin.net
log4j.appender.im.username = username
log4j.appender.im.password = password
log4j.appender.im.recipient = corlin@cybercorlin.net
log4j.appender.im.layout=org.apache.log4j.PatternLayout
log4j.appender.im.layout.ConversionPattern =[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n

# “%d %t %p %l %m %n” 的含义:

# %d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyyy-MM-dd HH:mm:ss},输出类似:2005-7-19 17:49:27
# %t
产生该日志事件的线程名;
# %p
日志的log_level,如DEBUGWARN或者INFO
# %c
输出所属的类目,通常就是所在类的全名,如“iNotes.Default”
# %m
日志的内容;
# %l
输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。如write2database.main(write2database.java:33)
# %n
输出一个回车换行符,Windows平台为“ ”Unix平台为“ ”

 

示例

package com.javer.test.log4j;

import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
import org.apache.log4j.HTMLLayout;

/**
* javer
Log4j例子程序
* @author javer QQ:84831612
* @version 1.0
* @version http://blog.csdn.net/java008
*/
public class LogTest
{
 public static void main(String[] args)
 {
  String FILEPATH = "f:""logconfig.properties";
  PropertyConfigurator.configure(FILEPATH);
  Logger log = Logger.getLogger(LogTest.class);
// log.addAppender(new HTMLLayout());
  for(int i=0;i<10;i++)
  {
   log.info(""+(i+1)+"条调试信息");
   log.debug("SQLException:", new java.sql.SQLException("SQL异常!"));
   log.info("hello log4j");
  }
 }
}

 

posted @ 2009-10-15 15:20  撒子都学  阅读(166)  评论(0)    收藏  举报