Log4J日志文件的详细配置

来源:互联网 发布:中端单反推荐 知乎 编辑:程序博客网 时间:2024/05/16 06:48


在应用程序中添加日志记录总的来说基于三个目的:监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析工作;跟踪代码运行时轨迹,作为日后审计的依据;担当集成开发环境中的调试器的作用,向文件或控制台打印代码的调试信息。 
   
最普通的做法就是在代码中嵌入许多的打印语句,这些打印语句可以输出到控制台或文件中,比较好的做法就是构造一个日志操作类来封装此类操作,而不是让一系列的打印语句充斥了代码的主体。 

在强调可重用组件开发的今天,除了自己从头到尾开发一个可重用的日志操作类外,Apache为我们提供了一个强有力的日志操作包-Log4j。 
   
Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件、甚至是套接口服务 器、NT的事件记录器、UNIX Syslog守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。最令人感兴趣的就 是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。 
   
此外,通过Log4j其他语言接口,您可以在C、C+ +、.Net、PL/SQL程序中使用Log4j,其语法和用法与在Java程序中一样,使得多语言分布式系统得到一个统一一致的日志组件模块。而且,通 过使用各种第三方扩展,您可以很方便地将Log4j集成到J2EE、JINI甚至是SNMP应用中。 

Log4j 支持两种配置文件格式,一种是 XML 格式的文件,一种是 Java 特性文件 lg4j.properties (键 = 值)。 

通常,我们都提供一个名为 log4j.properties的文件,在第一次调用到Log4J时,Log4J会在类路径(../web-inf/class/当然也可以放到其它任何目录,只要该目录被包含到类路径中即可)中定位这个文件,并读入这个文件完成的配置。这个配置文件告 诉Log4J以什么样的格式、把什么样的信息、输出到什么地方。 
Log4j有三个主要的组件:Loggers(记录器),Appenders(输出源)和Layouts(布局),这里可简单理解为日志类别,日志要输出的地方和日志以何种形式输出。综合使用这三个组件可以轻松的记录信息的类型和级别,并可以在运行时控制日志输出的样式和位置。 

Properties格式 

lg4j.properties 文件作为作为常用的配置文件的方法如下: 

先来看一个例子:
 

log4j.rootLogger=INFO, A1# A1 is set to be a ConsoleAppender.log4j.appender.A1=org.apache.log4j.ConsoleAppender# A1 uses PatternLayout.log4j.appender.A1.layout=org.apache.log4j.PatternLayout#log4j.appender.A1.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%nlog4j.appender.A1.layout.ConversionPattern=%-5p %c %m%nlog4j.logger.org.apache=ERROR

1)log4j.rootLogger=INFO, A1 
Logger 负责处理日志记录的大部分操作。 
其语法为: 
log4j.rootLogger = [ level ] , appenderName, appenderName, … 
其中, level 是日志记录的优先级,分为 OFF 、 FATAL 、 ERROR 、 WARN 、 INFO 、 DEBUG 、 ALL 或者自定义的级别。 Log4j 建议只使用四个级别,优先级从高到低分别是 ERROR 、 WARN 、 INFO 、 DEBUG 。通过在这里定义的级别,您可以控制到应用程序中相应级别的日志信息的开关。比如在这里定义了 INFO 级别,只有等于及高于这个级别的才进行处理,则应用程序中所有 DEBUG 级别的日志信息将不被打印出来。 ALL: 打印所有的日志, OFF :关闭所有的日志输出。 appenderName 就是指定日志信息输出到哪个地方。可同时指定多个输出目的地。 

2)log4j.appender.A1=org.apache.log4j.ConsoleAppender 
配置日志信息输出目的地 Appender 负责控制日志记录操作的输出。 
其语法为: 
log4j.appender.appenderName = fully.qualified.name.of.appender.class 
log4j.appender.appenderName.option1 = value1 
log4j.appender.appenderName.optionN = valueN 

其中, Log4j 提供的 appender 有以下几种: 
org.apache.log4j.ConsoleAppender (控制台), 
org.apache.log4j.FileAppender (文件), 
org.apache.log4j.DailyRollingFileAppender (每天产生一个日志文件), 
org.apache.log4j.RollingFileAppender (文件大小到达指定尺寸的时候产生一个新的文件),可通过 log4j.appender.R.MaxFileSize=100KB 设置文件大小,还可通过 log4j.appender.R.MaxBackupIndex=1 设置为保存一个备份文件。 
org.apache.log4j.WriterAppender (将日志信息以流格式发送到任意指定的地方) 

例如: 
log4j.appender.stdout=org.apache.log4j.ConsoleAppender 
定义一个名为 stdout 的输出目的地, ConsoleAppender 为控制台。 

3)log4j.appender.A1.layout=org.apache.log4j.PatternLayout 
其中, Log4j 提供的 layout 有以下几种: 
org.apache.log4j.HTMLLayout (以 HTML 表格形式布局), 
org.apache.log4j.PatternLayout (可以灵活地指定布局模式), 
org.apache.log4j.SimpleLayout (包含日志信息的级别和信息字符串), 
org.apache.log4j.TTCCLayout (包含日志产生的时间、线程、类别等等信息) 

log4j.appender.A1.layout.ConversionPattern=%-5p %c %m%n 
格式化日志信息 
Log4J 采用类似 C 语言中的 printf 函数的打印格式格式化日志信息,打印参数如下: 
%m 输出代码中指定的消息 
%p 输出优先级,即 DEBUG , INFO , WARN , ERROR , FATAL 
%r 输出自应用启动到输出该 log 信息耗费的毫秒数 
%c 输出所属的类目,通常就是所在类的全名 
%t 输出产生该日志事件的线程名 
%n 输出一个回车换行符, Windows 平台为 “rn” , Unix 平台为 “n” 
%d 输出日志时间点的日期或时间,默认格式为 ISO8601 ,也可以在其后指定格式,比如: %d{yyyy MMM dd HH:mm:ss,SSS} ,输出类似: 2002 年 10 月 18 日 22 : 10 : 28 , 921 
%l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。 


再来看一个示例文件:
 

log4j.rootCategory=INFO, stdout,file ###. 定义名为 stdout 的输出端的类型 log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=[QC] %p [%t] %C.%M(%L) | %m%n ###. 定义名为 file 的输出端的类型为每天产生一个日志文件。 log4j.appender.file =org.apache.log4j.DailyRollingFileAppender log4j.appender.file.File=log.txt log4j.appender.file.layout=org.apache.log4j.PatternLayout log4j.appender.file.layout.ConversionPattern=%d-[TS] %p %t %c - %m%n ###. 指定 com.neusoft 包下的所有类的等级为 DEBUG 。可以把 com.neusoft 改为自己项目所用的包名。 log4j.logger.com.neusoft=DEBUG ###. 如果项目中没有配置 EHCache ,则配置以下两句为 ERROR 。 log4j.logger.com.opensymphony.oscache=ERROR log4j.logger.net.sf.navigator=ERROR ### struts 配置 log4j.logger.org.apache.commons=ERROR log4j.logger.org.apache.struts=WARN ###也可以统一写成如下,当然了,如果想细分的话,当然上面比较好点#log4j.logger.org.apache=ERROR### displaytag 配置 log4j.logger.org.displaytag=ERROR ### .spring 配置 log4j.logger.org.springframework=DEBUG ### . ibatis 配置 log4j.logger.com.ibatis.db=WARN ### . hibernate 配置 log4j.logger.org.hibernate=DEBUG 

其他: 

1.ConsoleAppender选项 
    Threshold=WARN:指定日志消息的输出最低层次。 
    ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。 
    Target=System.err:默认情况下是:System.out,指定输出控制台 

2.FileAppender 选项 
    Threshold=WARN:指定日志消息的输出最低层次。 
    ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。 
    File=mylog.txt:指定消息输出到mylog.txt文件。 
    Append=false:默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容。 

3.DailyRollingFileAppender 选项 
    Threshold=WARN:指定日志消息的输出最低层次。 
    ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。 
    File=mylog.txt:指定消息输出到mylog.txt文件。 
    Append=false:默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容。 
    DatePattern='.'yyyy-ww:每周滚动一次文件,即每周产生一个新的文件。当然也可以指定按月、周、天、时和分。即对应的格式如下: 
    1)'.'yyyy-MM: 每月 
    2)'.'yyyy-ww: 每周 
    3)'.'yyyy-MM-dd: 每天 
    4)'.'yyyy-MM-dd-a: 每天两次 
    5)'.'yyyy-MM-dd-HH: 每小时 
    6)'.'yyyy-MM-dd-HH-mm: 每分钟 

4.RollingFileAppender 选项 
    Threshold=WARN:指定日志消息的输出最低层次。 
    ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。 
    File=mylog.txt:指定消息输出到mylog.txt文件。 
    Append=false:默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容。 
    MaxFileSize=100KB: 后缀可以是KB, MB 或者是 GB. 在日志文件到达该大小时,将会自动滚动,即将原来的内容移到mylog.log.1文件。 
    MaxBackupIndex=2:指定可以产生的滚动文件的最大数。 

XML格式的配置
 

<?xml version="1.0" encoding="GB2312" ?> <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"><log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"><!-- 设置通道 ID:org.zblog.all 和输出方式: org.apache.log4j.RollingFileAppender --><appender name="org.zblog.all" class="org.apache.log4j.RollingFileAppender"><!-- 设置 File 参数:日志输出文件名 --><param name="File" value="all.output.log" /><!-- 设置是否在重新启动服务时,在原有日志的基础添加新日志 --><param name="Append" value="false" /><!-- 设置文件大小 --><param name="MaxBackupIndex" value="10" /><layout class="org.apache.log4j.PatternLayout"><!-- 设置输出文件项目和格式 --><param name="ConversionPattern" value="%p (%c:%L)- %m%n" /></layout></appender><appender name="org.zblog.zcw" class="org.apache.log4j.RollingFileAppender"><param name="File" value="output.log" /><param name="Append" value="true" /><param name="MaxFileSize" value="10240" /><param name="MaxBackupIndex" value="10" /><layout class="org.apache.log4j.PatternLayout"><param name="ConversionPattern" value="%p (%c:%L)- %m%n" /></layout></appender><!-- 设置域名限制,即 zcw.log 域及以下的日志均输出到下面对应的通道中 --><logger name="zcw.log"><!-- 设置级别 --><level value="debug" /><!-- 与前面的通道 id 相对应 --><appender-ref ref="org.zblog.zcw" /></logger><root><!-- 与前面的通道 id 相对应 --><appender-ref ref="org.zblog.all" /></root></log4j:configuration>

Doc 文档可以从其网站上下载: 

http://logging.apache.org/log4j/docs/api/index.html 

http://logging.apache.org/log4j/docs/documentation.html 

  
关于 eclipse 的 log4j的插件log4e  可以去他的官方网站上下载:http://log4e.jayefem.de/index.php/Download 


转载地址:http://beijishiqidu.iteye.com/blog/1943457

0 0
原创粉丝点击