`

Log4j工作流程

阅读更多
Log4j深入浅出--配置文件--方法--原理--流程

Log4j是Apache组织的一个开源项目,它是一个日志操作包,通过使用Log4j可以指定日志信息输出的目的地,如控制台,文件,GUI组件,NT的时间记录器,还可以控制每一条日志输出的格式,此外通过定义日志的级别,能够非常细致的控制日志的输出,最好的地方是这些功能可以通过一个配置文件来灵活的进行配置,而不需要修改程序代码.在应用程序中输出日志有三个目的:

1)     监视代码变量的变化情况,把详细信息记录到文件中,进行统计分析.

2)     跟踪代码运行轨迹,作为日后审计的依据.

3)     担当集成开发环境中的调试器的作用,向文件和控制器打印代码的调试信息.

学习Log4j最重要的是首先要了解两个常用的接口:Log和LogFactory.首先说一说Log接口.通用日志包把日志消息分为6个级别:

1)     fatal致命的

2)     error错误

3)     warn警告

4)     info信息

5)     debug调试

6)     trace细节

其中级别按照以上的顺序,org.apache.commons.logging.Log接口代表日志器,它提供

一组输出日志的方法.例如fatal(Object message)参数都是一个对象,要注意的是只有当它输出日志的级别大于或者等于为日志配置的级别的时候,这个方法才会被执行.Log接口还提供了一组判断是否允许输出特定级别日志信息的方法,很简单例如isFatalEnabled()在程序输出某种级别的日志消息之前,提倡先调用以上的方法来判断该级别的日志是否允许输出,这有助于提高应用的性能.这种判断主要是为了提高性能,避免执行多余的操作.

以上阐述了重要的Log接口,下面简单说明一下LogFactory接口,这个接口也和Log接口一样在logging包中,接口提供了获得日志器实例的两个静态方法如下:

public static Log getLog(String name)throws LogConfigurationException;

public static Log getLog(Class class)throws LogConfigurationException;

第一个getLog()方法name参数作为日志器的名字,第二个getLog()方法以class参数指定的类的名字作为日志器的名字.

在强调可重用组件的今天,除了自己从头到尾开发一个可重用的日志操作类以外,还有一个Apache为我们提供的一个强有力的现成的日志操作包Log4j.主要由三大组件构成:

1)     Logger:负责生成日志,并能够对日志信息进行分类筛选.

2)     Appender:定义了日志信息输出的目的地,指定日志信息应该被输出到什么地方.

3)     Layout:指定日志信息的输出格式.

以上的三个组件协同工作,使得开发者能够依据日志信息类别记录信息,并能够在程序运行期间,控制日志信息的输出格式以及日志的存放地点.Log4j的Appender组件决定日志输出到什么地方,目前Log4j的Appender支持将日志信息输出到控制台Console,文件,GUI组件.一个Logger可以同时对应多个Appender也就是说一个Logger的日志信息可以同时输出在多个目的地上.例如可以为rootLogger配置两个Appender,一个是file一个是console可以这样写:log4j.rootLogger=warn.file.console然后可以用appender.console或者是appender.file来指定具体的控制台或者文件.当以上的都设置好了以后还需要配置Layout组件,主要是解决日志的输出格式,它的类型有:HTMLLayout(html格式),PattemLayout(可以灵活的指定布局模式),SimpleLayout(包含日志信息级别和信息的字符串)TTCCLayout(包含日志生产时间,线程和类别等信息).通过如上的研究已经可以配置Log4j了,然后就可以通过Log4j的API来操作日志了.如果要在Web应用中使用Log4j,需要创建一个配置文件配置Log4j的环境,然后就可以在其他的Web组件中获取Logger对象并输出日志.下面展示一个局部的Log4j,这里只是举例Log4j的配置文件和在具体的Action中进行调用,如下:

1)     Log4j的jar文件copy到WEB-INF的lib目录下.

2)     创建Log4j的配置文件log4j.properties存放在classes目录下.

Log4j.rootLogger=INFO,console,file

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

Log4j.appender.file=org.apache.log4j.RollingFileAppender

Log4j.appender.file=e:/log/log.txt

Log4j.appender.console.layout=org.apache.log4j.PattemLayout

Log4j.appender.console.layout.ConversionPattrm=%t%p-%m%n

Log4j.appender.file.layout=rog.appache.log4j.HTMLLayout

Log4j.appender.file.layout.ConversionPattem=%t%p-%m%n

配置文件配置好了,在Action里调用我就不用详细写了,很简单,就是引入logging的包,然后在execute()方法中通过Log log=LogFactory.getLog(“name”);获取具体的Log对象,在通过log.fatal(“信息”);类似的方法操作日志,还可以通过isDebugEnbled()等方法判断日志的输出.

    回顾一下Log4j主要三个组件构成:Logger,Appender,Layout,Logger控制日志信息的输出,Appender决定输出的目的地,Layout决定日志输出的格式.Log4j允许客户在配置文件文件中灵活的配置这些组件,然后读取配置文件中并配置Log4j环境,然后就可以在程序中任何要输出日志的地方调用适当的方法,这样对于日后程序的调试有着重大的作用.

log4j.properties-------------------

log4j.rootLogger = [DEBUG],CONSOLE
# level=ERROR、WARN、INFO、DEBUG


log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
#  org.apache.log4j.ConsoleAppender(控制台),
#  org.apache.log4j.FileAppender(文件),
#  org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件),
#  org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件),
#  org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)

log4j.appender.Threshold=DEBUG
log4j.appender.CONSOLE.Target=System.out

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

log4j.appender.CONSOLE.layout.ConversionPattern=-[%p]-[%l]- %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的一些配置属性-----------

1.layout属性

Log4J采用类似C语言中的printf函数的打印格式格式化日志信息,打印参数见表1如下:
%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)

2.级别

Log4J中的一个核心概念是日志级别是有序的。Log4J内置了5种日志级别为:

DEBUG < INFO < WARN < ERROR < FATAL

右边的级别比左边的高。每一个Logger实例都有一个日志级别,上面的5种输出方法就是对应于5种不同级别的日志请求。比如,如果c是一个Logger实例,c.info("some information")就是一个INFO级别的日志请求。一个日志请求会不会输出,取决于该Logger实例的日志级别和该日志请求级别的比较。规则如下:
假如在一个级别为p的Logger实例中发生一个级别为q的日志请求,则当q >= p时请求才会启用

apche通用日志包和log4j使用指南--------

Apache通用日志包提供一组通用的日志接口,用户可以自由选择实现日志接口的第三方软件
通用日志目前支持以下日志实现
Log4j日志器
JDK1.4Logging
SimpleLog日志器
NoOpLog日志器

Log 接口
通用日志包把日志消息分为6种级别Fatal,Error,Warn,Info,Debug和Trace

org.apache.commons.logging.Log接口代表日志器,它提供了一组输出日志的方法
    fatal(Object message);
    error(Object message);
    warn (Object message);
    info (Object message);
    debug(Object message);
    trace(Object message);
   这里需要注意的是,只有当输出日志的级别大于等于日志器配置的日志级别时,这个方法
   才会真正被执行.例如日志器设置日志级别为Warn,那么程序中,它的
   fatal(),error(),warn()方法会被执行,而info(),debug(),trace()
   不会被执行.
  
   Log接口还提供了一组判断是否允许输出特定级别日志消息的方法
    isFatalEnable();
    isErrorEnable();
    isWarnEnable();
    isInfoEnable();
    isDebugEnable();
    isTraceEnable();
   
   LogFactory接口
  
   org.apache.commons.logging.LogFactory接口提供了获得日志器实例的两个静态方法
    public static Log getLog(String name)throws LogConfigurationException
    public static Log getLog(Class class)throws LogConfigurationException
   
    public static Log getLog(Class class)
    {
     getLog(class.getName());
    }


Log4J 日志器

Log4J 是Apache的一个开放源代码的项目.

Log4J由三大组件构成

Logger: 负责生成日志,并能根据配置的日志器级别来决定什么日志消息应该被输出.

Appender: 定义日志消息输出的目的地,指定日志消息应该被输出到什么地方,
这些地方可以是控制台,文件和网络设备等.

Layout:指定日志消息的输出格式

         配置通用日志接口

在web应用中使用通用日志包,首先必须进行以下配置

准备有关的jar文件
在commons-logging.properties 属性文件中指定日志器(即日志实线类)
为特定的日志器设置日志级别,输出格式和输出地点等.

准备有关jar文件
这里主要是准备 commons-logging.jar和 log4j.jar 放到lib目录下

指定日志器

通用日志接口从名为 commons-logging.properties的属性文件中获取实现日志
接口的日志器信息,这个文件放在web-inf/class目录下
在该文件的org.apache.commons.logging.Log属性指定日志实现类
例如用Log4J日志器,那么设置
org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JCategoryLog

设置日志器属性

多数日志器允许以配置的方式,指定日志器的输出格式,地点,或者级别.
配置Log4J
Log4J,由三个重要的组件构成,Logger,Appender和Layout.
Log4J支持两种配置文件格式:一种是XML格式文件,一种是java属性文件.

配置Log4J组件
Logger组件支持继承关系,所有的Logger组件都直接或者间接继承rootLogger,
配置rootLogger的语法为
log4j.rootLogger=[priority],appenderName,appenderName,..

其中priority是日志级别,可选值OFF,FATAL,ERROR,WARN,INFO,DEBUG,TRACE和ALL
appenderName指定Appender组件,用户可以同时指定多个Appender组件,例如
以下代码指定rootLogger的日志级别为INFO,它有两个Appender,名为console和flie
log4j.rootLogger=INFO,console,file

配置Appender组件
配置日志消息输出目的地Appender,有以下几种
org.apache.log4j.ConsoleAppender(控制台)
org.apache.log4j.FileAppender(文件)
org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)
org.apache.log4j.RollingFileAppender(文件大小达到指定尺寸的时候产生一个新文件)
org.apache.log4j.WriterAppender(将日志信息以流个格式发送到任意指定的地方)

例如以下代码定义了一个名了file的Appender,它把日志信息输出到log.txt文件
   log4j.appender.file=org.apache.log4j.RollingFileAppender
   log4j.appender.file.File=log.txt
  
配置Layout组件

Log4j提供下面几种Layout
org.apache.log4j.HTMLLayout(以html表格形式布局)
org.apache.log4j.PatterLayout(可以灵活的指定布局模式)
org.apache.log4j.SimpleLayout(包含日志消息的级别和信息字符串)
org.apache.log4j.TTCCLayout(包含日志产生的时间线程和类别)

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)


如果为名"file"的Appender配置PatterLayout布局,则可以采用如下代码
    log4j.appender.file.layout=org.apache.log4j.PatterLayout
    log4j.appender.file.layout.ConversionPattern=%t%p-%m%n
   
    采用以上PatternLayout布局,从日志文件中看到的输出日志的形式如下
      http8080-Processor24 INFO -This is an info message
    %t对应"http8080-Processor24" %p对应INFO,%m%n对应后面具体的日志消息
   
    一个简单的应用
  
   
    新建log4j.properties
    log4j.rootLogger=INFO,a
    log4j.appender.a=org.apache.log4j.RollingFileAppender
    log4j.appender.a.File=log.txt
    log4j.appender.a.layout=org.apache.log4j.SimpleLayout
   
    import org.apache.commons.logging.Log;
     import org.apache.commons.logging.LogFactory;

public class Log4JTest {

     /**
      * @param args
      */
     private static Log log=LogFactory.getLog(Log4JTest.class);
     public static void main(String[] args) {
         // TODO Auto-generated method stub
       log.info("aaa");
    
     }

}

分享到:
评论

相关推荐

    tomcat下的log4j日志配置

    ### Tomcat 下的 Log4j 日志配置详解 在日常的 Web 开发中,日志记录对于调试问题、监控系统状态以及后期维护来说至关重要。在使用 Apache Tomcat 作为服务器时,合理配置日志框架(如 Log4j)能够极大地提高开发...

    log4j实用配置扩展

    #### 四、log4j的核心组件 log4j的核心组件主要包括**Loggers(记录器)**、**Appenders(输出源)**和**Layouts(布局)**。 1. **Loggers (记录器)**:负责生成日志信息,并决定是否发送日志信息到Appenders。记录器...

    log4j所依赖jar包

    Log4j是一个广泛使用的Java日志框架,由Apache软件基金会开发。它为应用程序提供了一种灵活的日志记录机制,使得开发者...在实际操作中,开发者还需要理解Log4j的配置和使用方法,以充分利用其功能并优化日志处理流程。

    log4j2所需jar包

    此库还负责解析Log4j2的配置文件,根据配置动态生成日志处理流程。 3. **版本号2.11.1**:这个版本号表示的是Log4j2的特定版本。每个版本都有可能引入新的特性、修复已知问题或优化性能。2.11.1版本意味着该版本...

    log4j详细配置说明

    更重要的是,Log4j 通过定义日志级别(例如 FATAL、ERROR、WARN、INFO 和 DEBUG),使开发者能够更精细地控制日志信息的生成流程。 Log4j 的核心优势在于它允许通过外部配置文件来调整日志行为,而无需改动应用程序...

    android-logging-log4j-1.0.3.jar

    《Android日志记录:Log4j的使用与详解》 在Android应用开发中,日志记录是必不可少的调试和分析工具。它可以帮助开发者追踪代码执行流程,定位...正确地集成和配置Log4j,将使我们的Android开发工作更加得心应手。

    log4j 下载

    **Apache Log4j详解** Apache Log4j是Java平台上的一个开源日志记录框架,它在软件开发领域具有广泛的应用,特别是在Java企业级应用中。Log4j为开发者提供了灵活的日志记录方案,使得程序在运行过程中可以方便地...

    log4j使用详解log4j使用详解

    #### 三、Log4j 的使用流程 1. **配置 Logger**:首先需要配置 Logger 来指定日志的输出等级以及输出目的地。 2. **配置 Appender**:根据需求选择不同的 Appender 类型,比如 ConsoleAppender 或 FileAppender。 3...

    log4j 1.2.15 源码

    log4j的配置文件(通常是log4j.properties或log4j.xml)是其工作方式的关键。通过配置,可以指定哪些类或包使用哪个Logger,设置日志级别,选择Appender及其Layout等。例如: ```properties # 配置控制台输出 log4j...

    log4j入门详解

    ### Log4j入门详解 #### 1. Log4j简介 Log4j是Apache软件基金会下的一个开源项目,它提供了一种强大且灵活的方式来管理和控制应用程序的日志记录。相较于简单的打印语句,Log4j提供了更为高级的功能,比如能够根据...

    phplog4j

    ptest可能包含了针对phplog4j的各种测试用例,通过运行这些测试,开发者可以验证phplog4j的功能是否正常,确保在新特性添加或修改后,原有的功能仍然能正常工作。 总结来说,phplog4j是一个PHP的日志管理工具,它...

    Log4j使用实例

    #### 二、Log4j 基本使用流程 ##### 1. 创建 Logger 实例 创建 Logger 实例是使用 Log4j 的第一步。通过调用 `Logger.getLogger(String name)` 方法来创建一个 Logger 对象。通常我们会传入当前类的名字作为参数,...

    log4j2.10.0

    通过深入研究Apache Log4j 2.10.0的源码,开发者不仅可以了解日志框架的内部工作原理,还能学习到设计一个高性能、可扩展的日志系统的最佳实践。这有助于在实际开发中更好地利用Log4j 2的功能,解决日志管理中的各种...

    log4j.1.2.7

    **日志框架Log4j 1.2.7详解** 日志系统在软件开发中扮演着至关重要的角色,它能够帮助开发者追踪程序运行时的详细信息,定位和解决问题。Log4j是Apache组织提供的一款非常著名的Java日志框架,它的1.2.7版本是一个...

    log4j学习源码教程

    通过阅读log4j的源码,我们可以深入了解其内部工作流程。例如,`Logger`类是如何创建和管理的,`Appender`是如何将日志信息输出的,以及`Level`类如何处理不同的日志级别。源码学习有助于提升对log4j的理解,便于在...

    Hibernate中log4j-1.2.16 +slf4j-log4j12-1.5.2

    SLF4J接口提供了一组通用的日志API,而`slf4j-log4j12`则是这个接口的具体实现,它将SLF4J调用映射到Log4j,这样即使项目中其他部分使用了SLF4J,我们仍然可以利用Log4j的强大功能。 在Hibernate中,日志管理同样...

    log4J日志.zip

    在“log4j日志.zip”压缩包中,包含的可能是Log4j的配置文件(如log4j.properties或log4j.xml)。这个文件定义了日志的级别、输出位置和格式。例如: ```properties # log4j.properties 示例 log4j.rootLogger=...

    J2EE复习积累(四)-Log4J

    1. **源码** - 这个标签暗示了博客可能深入到Log4J的源代码层面,讲解其内部工作机制,如何通过阅读源码来理解日志处理的流程,或者如何自定义和扩展Log4J的功能。 2. **工具** - 表明Log4J被视作一个开发工具,用于...

    Log4j的学习笔记

    通过对这些核心类的阅读和理解,我们可以更好地掌握Log4j的工作流程,从而在实际项目中更有效地使用和定制日志功能。 ### 四、实践与应用场景 1. **调试与问题定位**: 在开发阶段,通过调整日志级别,可以帮助定位...

Global site tag (gtag.js) - Google Analytics