Apache Log4j 配置
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