`

log4j----java 日志管理(转)

阅读更多


log4j 有三个主要组件

  • 类别Loggers------消息类型和优先级
  • 附加目的地Appenders-------在哪里报告消息
  • 布局Layouts------控制如何格式化消息

这三个组件共同合作,使开发者可以根据消息类型和优先级记录消息,并在运行时控制如何格式化消息以及在哪里报告消息.

Log4j基本使用方法

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

定义配置文件

Log4j支持两种配置文件格式,一种是XML格式的文件,一种是Java特性文件(键=值)。下面我们介绍使用Java特性文件做为配置文件的方法:

  1. 配置根Logger,其语法为:

    log4j.rootLogger = [ level ] , appenderName, appenderName, …

    其中,level 是日志记录的优先级,分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者您定义的级别。Log4j建议只使用四个级别,优先级从高到低分别是ERROR、WARN、INFO、DEBUG。通过在这里定义的级别,您可以控制到应用程序中相应级别的日志信息的开关。比如在这里定义了INFO级别,则应用程序中所有DEBUG级别的日志信息将不被打印出来。 
    appenderName就是指定日志信息输出到哪个地方。您可以同时指定多个输出目的地。
  2. 配置日志信息输出目的地Appender,其语法为
    log4j.appender.appenderName = fully.qualified.name.of.appender.class
    log4j.appender.appenderName.option1 = value1
    …
    log4j.appender.appenderName.option = valueN
    其中,Log4j提供的appender有以下几种: 
    org.apache.log4j.ConsoleAppender(控制台), 
    org.apache.log4j.FileAppender(文件), 
    org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件),org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件), 
    org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
  3. 配置日志信息的格式(布局),其语法为:
    log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class
    log4j.appender.appenderName.layout.option1 = value1
    …
    log4j.appender.appenderName.layout.option = valueN
    其中,Log4j提供的layout有以下几种: 
    org.apache.log4j.HTMLLayout(以HTML表格形式布局), 
    org.apache.log4j.PatternLayout(可以灵活地指定布局模式), 
    org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串), 
    org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)

 

4.Log4J采用类似C语言中的printf函数的打印格式格式化日志信息,打印参数如下:

         %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.R=org.apache.log4j.DailyRollingFileAppender

此句与第3行一样。定义名为R的输出端的类型为每天产生一个日志文件。

org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件),可通过log4j.appender.R.MaxFileSize=100KB设置文件大小,还可通过log4j.appender.R.MaxBackupIndex=1设置为保存一个备份文件。 

8 log4j.appender.R.File=D:\Tomcat 5.5\logs\qc.log

此句为定义名为R的输出端的文件名为D:\Tomcat 5.5\logs\qc.log

可以自行修改。

15 log4j.logger.org.apache.commons=ERROR

16 log4j.logger.org.apache.struts=WARN

这两句是struts的包。

17 log4j.logger.org.displaytag=ERROR

这句是displaytag的包。(QC问题列表页面所用)

18 log4j.logger.org.springframework=DEBUG

此句为Spring的包。

24 log4j.logger.org.hibernate.ps.PreparedStatementCache=WARN

25 log4j.logger.org.hibernate=DEBUG

此两句是hibernate的包。




 

=======================================================

WEB-INF\classes 中新建“log4j.properties”文件,加入以下代码,便能实现将错误信息在后台显示并写入到日志文件“jkpt-two.log”中:

log4j.rootLogger=ERROR,THEONE,THETWO

###################
# THEONE Appender
###################
log4j.appender.THEONE=org.apache.log4j.ConsoleAppender
log4j.appender.THEONE.layout=org.apache.log4j.PatternLayout
log4j.appender.THEONE.layout.ConversionPattern= %d{ISO8601}-[%p][%C{1}]-%m%n


###################
# THETWO Appender
###################
log4j.appender.THETWO=org.apache.log4j.DailyRollingFileAppender

log4j.appender.THETWO.File=C:/Program Files/Apache Group/Tomcat 5.0/logs/jkpt-two.log
log4j.appender.THETWO.File.MaxFileSize=500KB
log4j.appender.THETWO.File.MaxBackupIndex=50
log4j.appender.THETWO.File.Append=true
log4j.appender.THETWO.layout=org.apache.log4j.PatternLayout
log4j.appender.THETWO.layout.ConversionPattern= %d{ISO8601}-[%p][%C{1}]-%m%n

 

这段代码的解释如下:

log4j.rootLogger=ERROR,THEONE,THETWO   

----表示要获取的是“ERROR”级的信息;分别有两个“处理方式”:THEONE,THETWO   

ConsoleAppender,DailyRollingFileAppender

----表示“控制台”和“文件大小到达指定尺寸的时候产生一个新的文件”

PatternLayout

----表示“可以灵活地指定布局模式”

ConversionPattern

----表示输出的格式

log4j.appender.THETWO.File=C:/Program Files/Apache Group/Tomcat 5.0/logs/jkpt-two.log

----表示将信息写入“jkpt-two.log”中。

=====================================================

二、在代码中使用Log4j

  1.得到记录器

  使用Log4j,第一步就是获取日志记录器,这个记录器将负责控制日志信息。其语法为:

  public static Logger getLogger( String name)

  通过指定的名字获得记录器,如果必要的话,则为这个名字创建一个新的记录器。Name一般取本类的名字,比如:

  static Logger logger = Logger.getLogger ( ServerWithLog4j.class.getName () )

  2.读取配置文件

  当获得了日志记录器之后,第二步将配置Log4j环境,其语法为:

  BasicConfigurator.configure (): 自动快速地使用缺省Log4j环境。
  PropertyConfigurator.configure ( String configFilename) :读取使用Java的特性文件编写的配置文件。
  DOMConfigurator.configure ( String filename ) :读取XML形式的配置文件。

  3.插入记录信息(格式化日志信息)

  当上两个必要步骤执行完毕,您就可以轻松地使用不同优先级别的日志记录语句插入到您想记录日志的任何地方,其语法如下:

  Logger.debug ( Object message ) ;
  Logger.info ( Object message ) ;
  Logger.warn ( Object message ) ;
  Logger.error ( Object message ) ;

 

在代码中使用Log4j

我们在需要输出日志信息的类中做如下的三个工作:

1、导入所有需的commongs-logging类:

import org.apache.commons.logging.Log;

import org.apache.commons.logging.LogFactory;

2、在自己的类中定义一个org.apache.commons.logging.Log类的私有静态类成员:

private final Log log = LogFactory.getLog(getClass());

LogFactory.getLog()方法的参数使用的是当前类的class。

3、使用org.apache.commons.logging.Log类的成员方法输出日志信息:

if (log.isDebugEnabled())

{

log.debug("111");

}

if (log.isInfoEnabled())

{

log.info("222");

}

if (log.isWarnEnabled())

{

log.warn("333");

}

if (log.isErrorEnabled())

{

log.error("444");

}

if (log.isFatalEnabled())

{

log.fatal("555")

}  

==============================

### direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

### direct messages to file hibernate.log ###
#log4j.appender.file=org.apache.log4j.FileAppender
#log4j.appender.file.File=hibernate.log
#log4j.appender.file.layout=org.apache.log4j.PatternLayout
#log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

### set log levels - for more verbose logging change 'info' to 'debug' ###

log4j.rootLogger=info, stdout

log4j.logger.net.sf.hibernate=info

### log just the SQL
#log4j.logger.net.sf.hibernate.SQL=debug

### log JDBC bind parameters ###
log4j.logger.net.sf.hibernate.type=info

### log schema export/update ###
log4j.logger.net.sf.hibernate.tool.hbm2ddl=debug

### log cache activity ###
#log4j.logger.net.sf.hibernate.cache=debug

### enable the following line if you want to track down connection ###
### leakages when using DriverManagerConnectionProvider ###
#log4j.logger.net.sf.hibernate.connection.DriverManagerConnectionProvider=trace

分享到:
评论

相关推荐

    log4j-api-2.17.1.jar和log4j-core-2.17.1.jar

    这些接口包括最基本的`org.apache.logging.log4j.Logger`,它是所有日志记录的起点,以及`org.apache.logging.log4j.LogManager`,它负责管理日志配置和日志器实例。API库的主要目标是与实现层解耦,允许开发者在不...

    log4j-api-2.12.4.ja和log4j-core-2.12.4.jar

    Log4j是Java编程语言中最常用的日志记录框架之一,由Apache软件基金会开发。它提供了灵活的日志记录功能,使得开发者能够轻松地控制日志信息的输出格式、输出位置以及输出级别。此次提及的`log4j-api-2.12.4.jar`和`...

    log4j-API-最新稳定版本log4j-1.2.17

    **标题与描述解析** 标题提及的是"log4j-API-最新稳定版本log4j-1.2.17",这表明我们关注的是日志框架...对于使用Log4j的开发者来说,理解和掌握API的各个方面至关重要,以实现有效的日志管理并优化应用程序的监控。

    log4j-2.11.2的jar包和日志门面slf4j的jar包

    Log4j和SLF4J(Simple Logging Facade for Java)是Java领域广泛使用的两个日志框架,它们有着各自的特点和用途。下面将详细阐述这两个框架以及它们在给定压缩包中的具体组件。 首先,Log4j是Apache软件基金会的一...

    log4j-2.15.0-rc2-log4j.zip

    《深入理解Log4j 2.15.0-rc2:Java日志框架的核心组件》 在Java开发中,日志系统扮演着至关重要的角色,它帮助开发者追踪程序运行时的问题,提供调试信息,以及记录关键操作。Log4j是Apache组织开发的一款广泛使用...

    apache-log4j-2.17.0 核心jar包

    Log4j 是一个日志记录框架,Log4j 2 是对 Log4j 的升级,提供了重大改进,超越其前身 Log4j 1.x,并提供许多其它现代功能 ,例如对标记的支持、使用查找的属性替换、lambda 表达式与日志记录时无垃圾等。 Apache ...

    logging-log4j2-log4j-2.15.0-rc2.zip

    在实际项目中,合理配置Log4j 2可以大大提高日志管理效率。理解并掌握XML、JSON或YAML配置文件的编写规则,以及如何在代码中初始化和使用Logger,是每个Java开发者必备的技能。 总之,logging-log4j2-log4j-2.15.0...

    log4j-1.2.16.jar、slf4j-api-1.6.1.jar、slf4j-log4j12-1.6.1.jar资源包

    `log4j`、`SLF4J`(Simple Logging Facade for Java)以及`SLF4J-Log4j`适配器是Java日志框架中的关键组件,它们在本篇中将被详细探讨。 首先,我们来了解`log4j-1.2.16.jar`。`log4j`是由Apache软件基金会开发的一...

    log4j-2.18.0

    Log4j是Apache软件基金会的一个开源项目,提供了一个强大的日志记录框架,广泛应用于Java应用程序中。它的主要功能是帮助开发者记录程序运行过程中的各种信息,以便于调试和问题追踪。然而,这次的2.0及以上版本的...

    apache-log4j-2.14.0-bin.zip

    Apache Log4j 2.14.0 是一个广泛使用的日志记录库,尤其在Java应用程序中,它为开发者提供了灵活且高效的日志记录功能。这个版本是2021年的最新更新,意味着它包含了最新的特性、改进和安全修复。 Log4j 2是一个继...

    log4j-1.2.12.jar,slf4j-log4j12-1.6.6.jar,slf4j-api-1.6.1.jar

    在实际项目中,这三者通常是这样配合工作的:开发者使用SLF4J的API(`slf4j-api-1.6.1.jar`)编写日志语句,然后在运行时通过`slf4j-log4j12-1.6.6.jar` 将这些调用转交给Log4j(`log4j-1.2.12.jar`)来处理具体的...

    apache-log4j-2.8.2-bin.tar

    Apache Log4j 是一个广泛使用的Java日志框架,它的版本2.8.2是一个重要的更新,提供了许多功能改进和安全修复。这个压缩包文件“apache-log4j-2.8.2-bin.tar”包含了Log4j 2.8.2的二进制发行版,适用于那些希望快速...

    log4j-slf4j-impl.zip

    总结,Log4j-SLF4J-Impl结合了SLF4J的灵活性和Log4j的强大功能,为Java开发者提供了高效且可扩展的日志解决方案。了解并熟练掌握这一组件,能显著提升开发效率,同时也有助于构建更稳定、易维护的应用系统。

    logging-log4j2-log4j-2.15.0-rc2.7z

    Apache Log4j作为一个广泛应用的日志记录框架,为Java开发者提供了强大的日志处理能力。最近发布的"logging-log4j2-log4j-2.15.0-rc2.7z"是对Log4j的补丁版本,主要针对已知的安全问题和功能改进进行了更新,旨在...

    log4j-1.2.17.jar下载

    总结,Log4j-1.2.17.jar作为一款强大的日志工具,通过灵活的配置和丰富的API,为Java开发者提供了强大的日志管理能力。正确理解和运用Log4j,能有效提升开发效率,便于问题排查,是每个Java程序员必备的技能之一。

    log4j-1.2.17.jar、slf4j-api-1.7.21.jar、slf4j-log4j12-1.7.2.jar

    总之,`log4j-1.2.17.jar`、`slf4j-api-1.7.21.jar`和`slf4j-log4j12-1.7.2.jar`是Java开发中用于日志管理的关键组件,它们在Hibernate和Spring框架的使用中起到桥梁和接口的作用,确保了日志系统的灵活性和可扩展性...

    apache-log4j-2.17.0-bin.tar.gz

    1. **日志级别管理**:Log4j允许开发者定义多个日志级别,如DEBUG、INFO、WARN、ERROR和FATAL,使得开发者可以控制需要记录的信息级别,以便在调试和生产环境中进行适当的日志输出。 2. **日志布局**:Log4j提供了...

    log4j-2.8.2

    Log4j,作为Java平台上广泛使用的日志框架,自诞生以来就深受开发者喜爱。本文将深度探讨log4j的2.8.2版本,解析其核心组件及功能,旨在帮助读者更好地理解和运用这一强大的日志库。 一、log4j-2.8.2简介 Log4j ...

    slf4j-log4j12-1.5.6.jar

    总之,`slf4j-log4j12-1.5.6.jar` 在 Java 应用中扮演着连接 SLF4J 和 Log4j 1.2 的角色,帮助开发者轻松地管理和控制日志输出,同时保持代码的可移植性。在项目中正确配置和使用这个桥接器,能够极大地提高日志管理...

    log4j-2.17.1的jar包,导入即可使用

    Log4j是Java编程语言中广泛使用的日志记录框架,特别是在企业级应用和大型系统中。这个"**log4j-2.17.1**"的版本是该框架的一个更新,提供了修复的安全漏洞和性能优化。以下是关于Log4j 2.17.1的一些关键知识点: 1...

Global site tag (gtag.js) - Google Analytics