log4j详解

来源:互联网 发布:数据周报模板 编辑:程序博客网 时间:2024/06/05 19:31

==一、log4j配置文件简介==
 Log4j由三个重要的组件构成:日志信息的优先级,日志信息的输出目的地,日志信息的输出格式。日志信息的优先级从高到低有FATAL、ERROR、WARN、INFO、DEBUG、TRACE、ALL,
 分别用来指定这条日志信息的重要程度;日志信息的输出目的地指定了日志将打印到控制台还是文件中;而输出格式则控制了日志信息的显示内容。
 官方网址:http://logging.apache.org/log4j/1.2/manual.html       
    其他: http://zhangxiang390.iteye.com/blog/258455
          http://baike.baidu.com/link?url=Bb01jbHyL4vguFz31zkPVJSmtEGWYy186veLBi8MX33N5IL-uVsIEYFpL47TduKn
        
===1.日志信息的优先级===
 Log4j建议只使用四个级别,优先级从高到低分别是ERROR、WARN、INFO、DEBUG。通过在这里定义的级别,您可以控制到应用程序中相应级别的日志信息的开关。
 如在这里定义了INFO级别,则应用程序中所有低于INFO级别的日志信息将不被打印出来。
 通过在配置中修改Appender的Threshold即能实现,比如下面的例子:<param name="threshold" value="info"/> # 输出info级别以上的日志.

===2.日志信息的输出目的地===
 Log4j允许日志请求被输出到多个输出源。用Log4j的话说,一个输出源被称做一个Appender。
 ConsoleAppender:将log信息将写到Console
 FileAppender:将log信息将写到指定的文件中
 DailyRollingAppender:使用FileAppender可以将log信息输出到文件中,但是如果文件太大了读起来就不方便了。这时就可以使用  DailyRollingAppender。
                          DailyRollingAppender可以把Log信息输出到按照日期来区分的文件中。配置文件就会每天(时间可以设定)产生一个log文件,
                          每个log文件只记录当天的log信息
 RollingFileAppender:文件大小到达指定尺寸的时候产生一个新的文件。

===3.日志信息输出的格式===
====(1)布局样式====
  布局样式,通过设定<layout>节点的class值:
       1.org.apache.log4j.HTMLLayout(以HTML表格形式布局), 
        2.org.apache.log4j.PatternLayout(可以灵活地指定布局模式), 
        3.org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串), 
        4.org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)

====(2)格式====
  日志内容的格式,通过设定<param>节点的value值为以下标志的组合:
        1.%m 输出代码中指定的消息 
        2.%p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL 
       3.%r 输出自应用启动到输出该log信息耗费的毫秒数 
        4.%c 输出所属的类目,通常就是所在类的全名 
        5.%t 输出产生该日志事件的线程名 
        6.%n 输出一个回车换行符,Windows平台为"rn",Unix平台为"n" 
       7.%d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似:2002
            年10月18日 22:10:28,921 
       8.%l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(Test Log4.java:10)

==二、结合作业中的log4j配置文件实例进行讲解==
===1.配置文件和输出日志位置===
 配置文件:ROR安装目录\RCXCFMG\config 目录下的vsys_log4j.xml文件中,监察日志(Audit Log)相关配置信息
 输出日志:ROR安装目录\RCXCFMG\logs 目录下的vsys_audit_log文件

===2.配置文件内容及详解===
  '''<appender''' name="auditfileout" class="org.apache.log4j.RollingFileAppender"> 
                           # '''指定了输出源auditfileout,Appender类型为:RollingFileAppender'''
                     <param name="threshold" value="info"/>
                           # '''指定输出info级别以上的日志'''                       
                        <param name="MaxFileSize" value="10MB" />
                           # '''指定最大的文件是10MB,当一个日志文件达到最大尺寸时,Log4J会自动把vsys_audit_log重命名为vsys_audit_log.1,然后重建一个新
                                ''' 的vsys_audit_log文件,依次轮转。'''''
                        <param name="MaxBackupIndex" value="9" />
                     <param name="File" value="C:/Program Files (x86)/Resource Orchestrator/RCXCFMG/logs/vsys_audit_log" />
                           # '''指定了log的输出位置和log文件名'''
                        <param name="append" value="true" /> 
                           # '''设置是否在重新启动服务时,在原有日志的基础添加新日志'''
                        <param name="Encoding" value="UTF-8" />
                           # '''指定日志信息输出时的编码方式'''
                        <layout class="org.apache.log4j.PatternLayout"> 
                           # '''log内容布局和格式'''
                             <param name="ConversionPattern" value="%m %n" />
                           # '''输出代码中指定的消息,换行输出'''
                        </layout>
  '''</appender>''' 
  <'''category''' name="com.fujitsu.sop.vsys.common.log.AuditLogger" additivity="false"> 
                           # '''通过<category></category>的定义可以将各个包中的类日志输出到不同的日志文件中。'''
                                 '''默认情况下 子Logger 会继承 父Logger 的appender,也就是说 子Logger 会在 父Logger 的appender里输出。'''
                                 '''若是additivity设为false,则 子Logger 只会在自己的appender里输出,而不会在 父Logger 的appender里输出。'''
                        <priority value="info" />
                           # '''category中的优先级设定,如果appender中又设定了优先级,最终输出的日志信息以appender中与category中优先级最高的为准'''
                                '''例如此处value="info",appender中 <param name="threshold" value="trace"/>,则输出info级别以上的日志信息'''
                        <appender-ref ref="auditfileout" /> 
                           # '''指定class“com.fujitsu.sop.vsys.common.log.AuditLogger”中的日志使用appender名为“auditfileout”的配置输出日志''' 
  </'''category'''>

==三、作业中的log4j日志乱码解决==
 在<appender>中添加配置“<param name="Encoding" value="程序里的日志信息输出时的编码方式(UTF-8/GB2312等)" />”,
 将输出的日志文件内容编码格式指定为和“程序里的日志信息输出时的编码方式”一致即可,但须确保打印log时,需打印的信息不是乱码;
 若需打印的信息在打印之前已为乱码,日志文件中输出仍为乱码。


==三、vsys组中文化对应作业中的log4j日志乱码解决==
 在<appender>中添加配置“<param name="Encoding" value="程序里的日志信息输出时的编码方式(UTF-8/GB2312等)" />”,
 将输出的日志文件内容编码格式指定为和“程序里的日志信息输出时的编码方式”一致即可,但须确保打印log时,需打印的信息不是乱码;
 若需打印的信息在打印之前已为乱码,日志文件中输出仍为乱码。


 

0 0
原创粉丝点击