`

编写log4j的配置文件

阅读更多
Log4j有三个主要的组件:Loggers,Appenders和Layouts,这里可简单理解为日志记录器,日志要输出的地方和日志以何种形式输出。

Loggers
    组件在此系统中被分为五个级别:DEBUG、INFO、WARN、ERROR和FATAL。这五个级别是有顺序的,DEBUG < INFO < WARN < ERROR < FATAL,明白这一点很重要,这里Log4j有一个规则:假设Loggers级别为P,如果在Loggers中发生了一个级别Q比P高的日志输出事件,则会输出,否则屏蔽掉。

Appenders
    禁用与使用日志请求只是Log4j其中的一个小小的地方,Log4j日志系统允许把日志输出到不同的地方,如控制台(Console)、文件(Files)、根据天数或者文件大小产生新的文件、以流的形式发送到其它地方等等。
    常见的Appender有:
      org.apache.log4j.ConsoleAppender(控制台)
      org.apache.log4j.FileAppender(文件)
      org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件),
      org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)
      org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
      org.apache.log4j.net.SMTPAppender(发送到邮箱)
      org.apache.log4j.jdbc.JDBCAppender(储存到数据库)

Layouts
    有时用户希望根据自己的喜好格式化自己的日志输出。Log4j可以在Appenders的后面附加Layouts来完成这个功能。Layouts提供了四种日志输出样式,如根据HTML样式、自由指定样式、包含日志级别与信息的样式和包含日志时间、线程、类别等信息的样式等等。
    常见的Layout有:
      org.apache.log4j.HTMLLayout(以HTML表格形式布局),
      org.apache.log4j.PatternLayout(可以灵活地指定布局模式),
      org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),
      org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)
    Layouts有以下各常用的占位符:
      %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
    在程序中使用Log4j,也就是要输出日志信息,一般分为两个步骤:首先获得一个Logger实例,然后调用此实例的debug()、info()、warn()、error()、fatal()等进行日志的输出。
    在上面的配置文件中,讲到了两种命名策略,一种是直接根据类的全名命名,另一种是根据用途命名,那么在实例化和使用的时候,就会稍微有些不同。
    根据类全命命名:
    Logger logger = Logger.getLogger(this.getClass());
    //实例化一个logger,这里this.getClass()将返回这个类的全名,如果这个名字在配置文件中定义了,则这个logger有其相关定义了的属性,如果没有,则看是否定义了其父类和时候设置了继承。如果都没有,则拥有rootLogger的属性。
    //当然,logger的实例化可以任意取名,比如Logger logger = Logger.getLogger("myLogger"),但一句相关的策略,将会更加便于管理。

    logger.debug("按类取名测试:DEBUG");
    logger.info("按类取名测试:INFO");
    logger.warn("按类取名测试:WARN");
    logger.error("按类取名测试:ERROR");
    logger.error("按类取名测试:ERROR", Exception e);
    logger.fatal("按类取名测试:FATAL");
    //这就是条用logger的各种方法输出日志信息。其中logger.error("按类取名测试:ERROR", Exception e)也会将异常堆栈e的相关信息也输出到相应的Appender

    根据用途命名:
    Logger logger_sa = Logger.getLogger("sa");
    logger_sa.info("Log4j演示程序启动成功");

    Logger logger_ua = Logger.getLogger("ua");
    logger_ua.info("用户boyyf注册成功");

    Logger logger_e = Logger.getLogger("e");
    try {
    Integer.parseInt("a");
    } catch (Exception e) {
    logger_e.error("出现数值转换异常",e);
//这样会在日志中记录异常堆栈
    }



-----------------------------------------------------------
#下面是Logger的定义

#定义根logger,其余所有的logger都是它的子logger
log4j.rootLogger=DEBUG

#logger的定义策略1:根据类名定义logger

#这里就定义了两个logger,一个名为"com.ins1000.log4j.servlets",另一个名
#为"com.ins1000.log4j.servlets"。#logger的命名是具有层次性和隶属性的,跟
#类的全名一样,可以说"com.ins1000.log4j.servlets.Test"这个logger是"com.
#ins1000.log4j.servlets"这个的子logger。
log4j.logger.com.ins1000.log4j.servlets=DEBUG,CONSOLE
log4j.logger.com.ins1000.log4j.servlets.Test=DEBUG,CONSOLE,DailyRollingFile


#logger的定义策略2:根据用途定义logger

#定义了一个名为sa(system action)的logger,用于记录程序的系统行为,如程
#序启动,初始化完成等
log4j.logger.sa=DEBUG,CONSOLE_SA

#定义了一个名为us(users action)的logger,用于记录用户的一般行为,如注册
#、发布文章、发布作品等
log4j.logger.ua=DEBUG,DailyRollingFile_UA

#定义了一个名为e(Errors或Exceptions)的logger,用于记录程序运行中出现的
#错误和异常
log4j.logger.e=DEBUG,CONSOLE_E,ROLLING_FILE_E

#以上各个定义的等号右方DEBUG的表示该logger的日志输出起始级别,接着后面是
#这个logger要输#出的Appender,可以有多个,用逗号隔开。
#其次,这里提到了两种logger的命名策略,虽然互联网上几乎所有的教程皆称以类
#的全名是最简单也最好的命名策略,因为其层次结构跟我们的项目完全一致,但是
#本人处于应用需要,还是提出了另一种根据用途命名的策略,即把所有需要记录的
#日志信息分为3中(系统行为、用户行为、异常),分别输出到不同的地方。


#下面定义各个层次是否继承父辈的属性(初始级别和Appenders)
log4j.additivity.com.ins1000.log4j=true
log4j.additivity.com.ins1000.log4j.Test=true
log4j.additivity.e=false
log4j.additivity.sa=false
log4j.additivity.ua=false
log4j.addivity.org.apache=true


#下面定义各个Appenders

###################################
# Console Appender
###################################
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=[ins1000]%p: %m [%c]%n


###################################
# Console Appender For SystemAction
###################################
log4j.appender.CONSOLE_SA=org.apache.log4j.ConsoleAppender
log4j.appender.Threshold=DEBUG
log4j.appender.CONSOLE_SA.Target=System.out
log4j.appender.CONSOLE_SA.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE_SA.layout.ConversionPattern=[ins1000]\u7cfb\u7edf\u4fe1\u606f: %m%n

###################################
# Console Appender For Errors and Exceptions
###################################
log4j.appender.CONSOLE_E=org.apache.log4j.ConsoleAppender
log4j.appender.Threshold=DEBUG
log4j.appender.CONSOLE_E.Target=System.out
log4j.appender.CONSOLE_E.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE_E.layout.ConversionPattern=[ins1000]\u7cfb\u7edf\u5f02\u5e38: %m [%l]%n

#上面的Appender都是输出到控制台,多个项目的信息都可能被输出到控制台,所以
#一般都会加上项目名称,如[ins1000]

########################
# Rolling File For Errors and Exceptions
########################
log4j.appender.ROLLING_FILE_E=org.apache.log4j.RollingFileAppender
log4j.appender.ROLLING_FILE_E.Threshold=ERROR

log4j.appender.ROLLING_FILE_E.File=${webappHome}/WEB-INF/log/errors/ins1000.log
#日志文件的位置,其中${webappHome}代表环境变量中webappHome的值,Log4j会在
#初始化的死后自动期待,所以我们可以在Log4j初始化的时候将webapp的绝对路径存
#入系统环境标量中,从而解决要手动修改日志文件的问题

log4j.appender.ROLLING_FILE_E.Append=true

log4j.appender.ROLLING_FILE_E.MaxFileSize=5120KB
#一个文件的大小(当超过这个大小时,自动更换一个文件)

log4j.appender.ROLLING_FILE_E.MaxBackupIndex=1
log4j.appender.ROLLING_FILE_E.layout=org.apache.log4j.PatternLayout
log4j.appender.ROLLING_FILE_E.layout.ConversionPattern=%n%n[%d{yyyy-MM-dd HH:mm:ss}]%m [%l]%n

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

log4j.appender.DailyRollingFile.DatePattern=yyyy-MM-dd'.log'
#日期戳后缀的格式

log4j.appender.DailyRollingFile.File=${webappHome}/WEB-INF/log/ins1000_
log4j.appender.DailyRollingFile.Append=true
log4j.appender.DailyRollingFile.layout=org.apache.log4j.PatternLayout
log4j.appender.DailyRollingFile.layout.ConversionPattern=[%-5p]%m [%c][%d{yyyy-MM-dd HH:mm:ss}]%n

#这个Appender的工作机理是先将日志写在/WEB-INF/log/ins1000_,待到了第二天,自动将其更名为
#ins1000_yyyy-MM-dd.log(其中yyyy-MM-dd是第一天的日期)。然后仍将第二天的日志先记录在在
#ins1000_中,第三天再改名,以此类推。

########################
# DailyRollingFile Appender For Users Action
#######################
log4j.appender.DailyRollingFile_UA=org.apache.log4j.DailyRollingFileAppender
log4j.appender.DailyRollingFile_UA.DatePattern=yyyy-MM-dd'.log'
log4j.appender.DailyRollingFile_UA.File=${webappHome}/WEB-INF/log/users_action/ins1000_
#${webappHome} is an enviorment variable which is setted in Log4jInit
#it refers to the absolute path of the webapp
log4j.appender.DailyRollingFile_UA.Append=true
log4j.appender.DailyRollingFile_UA.layout=org.apache.log4j.PatternLayout
log4j.appender.DailyRollingFile_UA.layout.ConversionPattern=[%d{yyyy-MM-dd HH:mm:ss}] %m%n
   
-----------------------------------------------------------


分享到:
评论

相关推荐

    Log4J的配置文件

    Log4J的配置文件(Configuration File)就是用来设置记录器的级别、存放器和布局的,它可接key=value格式的设置或xml格式的设置信息。Log4j 框架是用 Java 语言编写的标准日志记录框架。通过配置,可以创建出Log4J的...

    log4j配置文件

    完整的log4j配置文件,省去了自己编写配置文件的烦恼,log4j是现在java编程用的最普遍的日志记录工具,很方便

    log4j入门到详解

    2.3 编写配置文件........ 2.4 输出结果 ........... 3. Log4j 构成 ........... 4. Log4j 使用方法........ 4.1 properties 配置文件详解 4.2 XML 配置文件详解 .... 4.3 properties 比较详细的例子 4.4 在代码中...

    Log4j日志管理系统简单使用说明

    在实际编程时,要使Log4j真正在系统中运行事先还要对配置文件进行定义。定义步骤就是对Logger、Appender及Layout的分别使用,具体如下:    1、 配置根Logger,其语法为:  log4j.rootLogger = [ level ] , ...

    Log4j日志根据模块不同输出到不同的日志文件开发配置,便于监控项目各功能模块的运行情况

    文件中内容包括模块中某个类单独输出到一个日志文件中、模块中某个package单独输出到一个日志文件中、同一模块不同package输出到一个日志文件中三种情况下log4j.properties配置项配置事例、Java类中代码如何一致编写...

    Log4j教程.docx

    Log4j是高度可配置的,并可通过在运行时的外部文件配置。它根据记录的优先级别,并提供机制,以指示记录信息到许多的目的地,诸如:数据库,文件,控制台,UNIX系统日志等。 Log4j中有三个主要组成部分: • loggers...

    Log4j学习和详细配置

    name : 这个那么就是你配置文件中对应的 log4j.logger. 后面的字符串  通过指定的名字获得记录器,如果必要的话,则为这个名字创建一个新的记录器。Name一般取本类的名字,比如:  static Logger logger = ...

    log4j.properties 文件

    在Eclipse里编写Java程序语言运行时所需文件。

    log4j配置详解

    详细的讲述了log4j的配置,从中可以学习到日志文件的编写以及注意事项

    log4j从入门到详解

    2.3编写配置文件 2.4输出结果 3.Log4j构成 4.Log4j使用方法 4.1properties配置文件详解 4.2XML配置文件详解 4.3properties比较详细的例子 4.4在代码中使用Log4j 4.5注意事项 5.Properties文件实例说明

    log4cplus 源码(C++编写的开源的日志系统)

    log4cplus是C++编写的开源的日志系统,前身是java编写的log4j系统.受Apache Software License保护。作者是Tad E. Smith。log4cplus具有线程安全、灵活、以及多粒度控制的特点,通过将信息划分优先级使其可以面向程序...

    AOP+log4j记录日志

    AOP能够做到这一点,让开发人员更加专注于系统的业务编码,而无需顾虑日志问题(这一点大家可以联系声明式事务处理的方式,配置好了处理事务的配置文件,编写Manager或者action时,都无需顾虑事务)

    Java开发基于SSM框架开发的客户管理系统源码.zip

    在项目文件夹下的config文件夹中包含数据库常量配置文件,spring配置文件,MyBatis配置文件,log4j配置文件,资源配置文件以及Spring MVC配置文件,其中数据库常量配置文件为db.properties以及MyBatis配置文件...

    log4cpp源代码

    log4cpp的源代码。log4cpp是用C++语言编写的日志工具,借鉴了log4j的思想,可以自由配置日志的输出格式、输出文件等,是一个很方便的程序调试、运行追踪工具。

    Log4cplus源代码

    log4cplus的源代码。log4cplus是用C++语言编写的日志工具,借鉴了log4j的思想,可以自由配置日志的输出格式、输出文件等,是一个很方便的程序调试、运行追踪工具。

    JAVA基于SSM框架开发的客户管理系统源码+数据库,后台使用SSM框架,前台使用Bootstrap和jquery框架

    在项目文件夹下的config文件夹中包含数据库常量配置文件,spring配置文件,MyBatis配置文件,log4j配置文件,资源配置文件以及Spring MVC配置文件,其中数据库常量配置文件为db.properties以及MyBatis配置文件...

    如何编写批处理文件批处理文件批处理文件

    简明批处理教程22009年10月20日 星期二 下午 05:35 最近对于批处理技术的探讨比较热,也有不少好的批处理程序发布,但是如果没有一定的相关知识恐怕不容易看懂和理解这些批处理文件,也就更谈不上自己动手编写了,古...

    log4c源代码

    log4c的源代码。log4c是用C语言编写的日志工具,借鉴了log4j的思想,可以自由配置日志的输出格式、输出文件等,是一个很方便的程序调试、运行追踪工具。还有一个C语言的日志工具是ZLog,与这个有些像。

    《程序天下:J2EE整合详解与典型案例》光盘源码

    12.6.16 编写Spring和Hibernate的配置文件spring-config.xml 12.6.17 编写web.xml 12.6.18 验证示例 12.7 小结 第四篇 J2EE项目案例精选 第十三章 网上调查系统 13.1 系统概述 13.2 需求分析 13.2.1 系统用例图 ...

Global site tag (gtag.js) - Google Analytics