Apache Log4j 配置


:Mr.zhou  阅读: 12,295 次

  Apache Log4j是一个基于Java的日志记录工具。kafka zookeeper haddop 使用的就是 log4j。Log4j 1.x 已不再维护,最新为 Apache Log4j 2。

  目前 kafka hadoop zookeeper 中自带的是 log4j-1.2.1x.jar 。作为程序使用者,以下针对 Log4j 的配置进行整理。

  Log4j 有三个主要的组件:Loggers Appenders Layouts。这些组件协同工作根据日志的类型与级别来记录日志信息,对日志内容进行格式化并指定日志信息的输出位置。

  Loggers 为记录器,将指定级别的日志信息输出至已定义好的 Appender。

  Appenders 用于指定日志输出方式、日志保存路径,日志名及日志切割方式。

  Layouts 定义日志内容的格式。

一、Loggers

配置语法:

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

  日志级别在 org.apache.log4j.Priority.class 中定义:
  官方提供的日志级别由低到高分别为:TRACE < DEBUG < INFO < WARN < ERROR < FATAL
  建议使用中间的四个级别 DEBUG,INFO,WARN,ERROR。日志文件只记录大于等于当前级别的信息。
  appenderName 为将日志输出保存到已定义好的 Appender。

二、Appenders

配置语法:

log4j.appender.appenderName = fully.qualified.name.of.appender.class.
log4j.appender.appenderName.option1 = value1

官方 jar 包中提供以下5类 appender:

  1、org.apache.log4j.ConsoleAppender :将日志输出至控制台
   选项:
    log4j.appender.appenderName=org.apache.log4j.ConsoleAppender

    log4j.appender.appenderName.Threshold=WARN :指定日志信息的最低输出级别
    log4j.appender.appenderName.ImmediateFlush=true :日志信息是否立即输出
    log4j.appender.appenderName.Target=System.err :默认为 System.out

  2、org.apache.log4j.DailyRollingFileAppender :将日志输出至文件,日志文件每天切割
   选项:
    log4j.appender.appenderName=org.apache.log4j.DailyRollingFileAppender

    log4j.appender.appenderName.Threshold=WARN :指定日志信息的最低输出级别
    log4j.appender.appenderName.ImmediateFlush=true :日志信息是否立即输出
    log4j.appender.appenderName.Append=false :true – 消息增加到指定文件中,false – 消息覆盖指定的文件内容,默认值是true
    log4j.appender.appenderName.File=/data/logs/appname.log :指定日志保存路径
    log4j.appender.appenderName.DatePattern=’.’yyyy-MM-dd-HH :以最后结尾的时间单位为周期进行日志切割。如’.’yyyy-MM 每月;’.’yyyy-MM-dd 每天;’.’yyyy-MM-dd-HH 每时

  3、org.apache.log4j.FileAppender :将日志输出至文件
   选项:
    log4j.appender.appenderName=org.apache.log4j.FileAppender

    log4j.appender.appenderName.Threshold=WARN :指定日志信息的最低输出级别
    log4j.appender.appenderName.ImmediateFlush=true :日志信息是否立即输出
    log4j.appender.appenderName.Append=false :true – 消息增加到指定文件中,false – 消息覆盖指定的文件内容,默认值是true
    log4j.appender.appenderName.File=/data/logs/appname.log :指定日志保存路径

  4、org.apache.log4j.RollingFileAppender :将日志输出至文件,日志文件按指定的大小进行切割
   选项:
    log4j.appender.appenderName=org.apache.log4j.RollingFileAppender

    log4j.appender.appenderName.Threshold=WARN :指定日志信息的最低输出级别
    log4j.appender.appenderName.ImmediateFlush=true :日志信息是否立即输出
    log4j.appender.appenderName.Append=false :true – 消息增加到指定文件中,false – 消息覆盖指定的文件内容,默认值是true
    log4j.appender.appenderName.File=/data/logs/appname.log :指定日志保存路径
    log4j.appender.appenderName.MaxFileSize=10MB :指定日志达到此大小时进行日志切割,单位可以为KB MB GB
    log4j.appender.appenderName.MaxBackupIndex=2 :指定日志文件轮询个数,即保留历史日志的个数。此处为保留 2 个10MB的日志文件 appname.log.1 appname.log.2 和正在写入的appname.log

  5、org.apache.log4j.WriterAppender :将日志以信息流的格式发送到指定位置

三、Layouts

配置语法:
log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class

官方 jar 包中提供以下4类 Layout:

  1、org.apache.log4j.HTMLLayout :HTML格式
   选项:
    log4j.appender.appenderName=org.apache.log4j.DailyRollingFileAppender

    log4j.appender.appenderName.layout=org.apache.log4j.HTMLLayout
    log4j.appender.appenderName.layout.LocationInfo=true :输出java文件名称和行号,默认为false。
    log4j.appender.appenderName.layout.Title=appname Log :指定标题

  2、org.apache.log4j.PatternLayout :可通过参数灵活定义
   选项:
    log4j.appender.appenderName=org.apache.log4j.PatternLayout

    log4j.appender.appenderName.layout=org.apache.log4j.PatternLayout
    log4j.appender.appenderName.layout.ConversionPattern=[%d] %p %m (%c)%n :指定日志内容格式,详细参数见下方

  3、org.apache.log4j.SimpleLayout :简单的包含日志类别和信息

  4、org.apache.log4j.TTCCLayout :时间、线程、类别、组件等信息

采用 PatternLayout 模式时参数转换:

   %r 用于输出从layout(布局)的构建到日志事件创建所经过的毫秒数。
   %t 用来输出生成该日志事件的线程的名称。
   %p 用于输出日志事件的优先级。
   %c 用于输出日志事件的category(类别)。
   %x 用于输出与产生该日志事件的线程相关联的嵌套诊断上下文。
   %X{key} 用于输出与产生指定的key的日志事件的线程相关联的映射诊断上下文。
   %m 用于输出与日志记录事件相关联的应用程序提供的消息。
   %n 用来输出该其所在的特定平台的换行字符。

四、配置文件

  Log4j支持 XML格式、properties属性格式两类配置文件。 properiies 文件格式易于查看修改。kafka zookeeper haddop 默认的配置文件为 log4j.properties

其他配置项

    log4j.additivity.org.apache=false:表示Logger不会在父Logger的appender里输出,默认为true。

  截取 zookeeper-3.4.9 中 log4j.properties 配置文件内容以供对比参考:

zookeeper.root.logger=INFO, CONSOLE
zookeeper.console.threshold=INFO
zookeeper.log.dir=.
zookeeper.log.file=zookeeper.log
zookeeper.log.threshold=DEBUG
zookeeper.tracelog.dir=.
zookeeper.tracelog.file=zookeeper_trace.log
log4j.rootLogger=${zookeeper.root.logger}
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.Threshold=${zookeeper.console.threshold}
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d{ISO8601} [myid:%X{myid}] - %-5p [%t:%C{1}@%L] - %m%n
log4j.appender.ROLLINGFILE=org.apache.log4j.RollingFileAppender
log4j.appender.ROLLINGFILE.Threshold=${zookeeper.log.threshold}
log4j.appender.ROLLINGFILE.File=${zookeeper.log.dir}/${zookeeper.log.file}
log4j.appender.ROLLINGFILE.MaxFileSize=10MB
log4j.appender.ROLLINGFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.ROLLINGFILE.layout.ConversionPattern=%d{ISO8601} [myid:%X{myid}] - %-5p [%t:%C{1}@%L] - %m%n
log4j.appender.TRACEFILE=org.apache.log4j.FileAppender
log4j.appender.TRACEFILE.Threshold=TRACE
log4j.appender.TRACEFILE.File=${zookeeper.tracelog.dir}/${zookeeper.tracelog.file}
log4j.appender.TRACEFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.TRACEFILE.layout.ConversionPattern=%d{ISO8601} [myid:%X{myid}] - %-5p [%t:%C{1}@%L][%x] - %m%n

  在使用zookeeper 时要修改默认的log4j配置文件,以防日志文件塞满硬盘。

五、Apache Log4j 2 相对于 Log4j 1 ,该框架被从头重写,并从现有的日志解决方案中获得灵感(包括Log4j 1和JUL)。该版本与Log4j 1的主要差异是:

  · 改进的配置语法
  · 支持XML和JSON配置
  · 改进的过滤器
  · 属性(Property)支持
  · 标记
  · 提高速度
  · 模块化:Log4j 2支持插件系统
  · 提高了可靠性
  · 配置自动重装


转载请注明原文链接:http://www.z-dig.com/apache-log4j-configuration.html



正文部分到此结束