Log4j配置属性详解、滚动日志配置,以及多种Appender输出配置示例

Log4j配置属性详解,以及滚动日志配置


Log4j有三个主要的组件: Loggers(记录器)Appenders (输出源)Layouts(布局)。这里可简单理解为日志类别,日志要输出的地方和日志以何种形式输出。综合使用这三个组件可以轻松地记录信息的类型和级别,并可以在运行时控制日志输出的样式和位置。

一、主要组件

Loggers

Loggers组件在此系统中被分为五个级别:DEBUG、INFO、WARN、ERROR和FATAL。这五个级别是有顺序的,DEBUG < INFO < WARN < ERROR < FATAL,分别用来指定这条日志信息的重要程度。Log4j在输出日志时,只输出级别不低于设定级别的日志信息。假设Loggers级别设定为INFO,则INFO、WARN、ERROR和FATAL级别的日志信息都会输出,而级别比INFO低的DEBUG则不会输出。

配置文件中 log4j.rootLogger=debug,console,file,AAA,BBB,CCC,…

其中第一个单词为日志的输出级别(输出级别共有OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL),

后面的console,file,AAA,BBB,CCC,…为输出端,输出端可以自定义,以","做分割

常用的输出端有控制台(ConsoleAppender)、文件(FileAppender、DailyRollingFileAppender、RollingFileAppender)、数据库(JDBCAppender )

Appenders

禁用和使用日志请求只是Log4j的基本功能,Log4j日志系统还提供许多强大的功能,比如允许把日志输出到不同的地方,如控制台(Console)、文件(Files)等,可以根据天数或者文件大小产生新的文件,可以以流的形式发送到其它地方等等。

常使用的类如下:

org.apache.log4j.ConsoleAppender(控制台)

org.apache.log4j.FileAppender(文件)

org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)

org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)

org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)

配置模式:

log4j.appender.appenderName = className
log4j.appender.appenderName.Option1 = value1
log4j.appender.appenderName.OptionN = valueN

Layouts

有时用户希望根据自己的喜好格式化自己的日志输出,Log4j可以在Appenders的后面附加Layouts来完成这个功能。Layouts提供四种日志输出样式,如根据HTML样式、自由指定样式、包含日志级别与信息的样式和包含日志时间、线程、类别等信息的样式。

常使用的类如下:

org.apache.log4j.HTMLLayout(以HTML表格形式布局)

org.apache.log4j.PatternLayout(可以灵活地指定布局模式)

org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串)

org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等信息)

配置模式:

log4j.appender.appenderName.layout =className
log4j.appender.appenderName.layout.Option1 = value1
log4j.appender.appenderName.layout.OptionN = valueN

二、Log4j配置属性详解

在实际应用中,要使Log4j在系统中运行须事先设定配置文件。配置文件事实上也就是对Logger、Appender及Layout进行相应设定。Log4j支持两种配置文件格式,一种是XML格式的文件,一种是properties属性文件。下面以properties属性文件为例介绍log4j.properties的配置。

一、配置根Logger

log4j.rootLogger = [ level ] , appenderName1, appenderName2, …

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

level :设定日志记录的最低级别,可设的值有OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者自定义的级别,Log4j建议只使用中间四个级别。通过在这里设定级别,您可以控制应用程序中相应级别的日志信息的开关,比如在这里设定了INFO级别,则应用程序中所有DEBUG级别的日志信息将不会被打印出来。

appenderName:就是指定日志信息要输出到哪里。可以同时指定多个输出目的地,用逗号隔开

例如:log4j.rootLogger=INFO,A1,B2,C3

二、配置日志信息输出目的地(appender)

log4j.appender.appenderName = className

appenderName:自定义appderName,在log4j.rootLogger设置中使用;

className:可设值如下:

  • org.apache.log4j.ConsoleAppender(控制台)
  • org.apache.log4j.FileAppender(文件)
  • org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)
  • org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)
  • org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
ConsoleAppender选项
  • Threshold=WARN:指定日志信息的最低输出级别,默认为DEBUG。
  • ImmediateFlush=true:表示所有消息都会被立即输出,设为false则不输出,默认值是true。
  • Target=System.err:默认值是System.out。
FileAppender选项
  • Threshold=WARN:指定日志信息的最低输出级别,默认为DEBUG。
  • ImmediateFlush=true:表示所有消息都会被立即输出,设为false则不输出,默认值是true。
  • Append=false:true表示消息增加到指定文件中,false则将消息覆盖指定的文件内容,默认值是true。
  • File=D:/logs/logging.log4j:指定消息输出到logging.log4j文件中。
DailyRollingFileAppender选项
  • Threshold=WARN:指定日志信息的最低输出级别,默认为DEBUG。
  • ImmediateFlush=true:表示所有消息都会被立即输出,设为false则不输出,默认值是true。
  • Append=false:true表示消息增加到指定文件中,false则将消息覆盖指定的文件内容,默认值是true。
  • File=D:/logs/logging.log4j:指定当前消息输出到logging.log4j文件中。
  • DatePattern='.'yyyy-MM:每月滚动一次日志文件,即每月产生一个新的日志文件。当前月的日志文件名为logging.log4j,前一个月的日志文件名为logging.log4j.yyyy-MM。

另外,也可以指定按周、天、时、分等来滚动日志文件,对应的格式如下:

  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:每分钟
RollingFileAppender选项
  • Threshold=WARN:指定日志信息的最低输出级别,默认为DEBUG。
  • ImmediateFlush=true:表示所有消息都会被立即输出,设为false则不输出,默认值是true。
  • Append=false:true表示消息增加到指定文件中,false则将消息覆盖指定的文件内容,默认值是true。
  • File=D:/logs/logging.log4j:指定消息输出到logging.log4j文件中。
  • MaxFileSize=100KB:后缀可以是KB, MB 或者GB。在日志文件到达该大小时,将会自动滚动,即将原来的内容移到logging.log4j.1文件中。
  • MaxBackupIndex=2:指定可以产生的滚动文件的最大数,例如,设为2则可以产生logging.log4j.1,logging.log4j.2两个滚动文件和一个logging.log4j文件。

三、配置日志信息的输出格式(Layout):

log4j.appender.appenderName.layout=className

className:可设值如下:

  1. org.apache.log4j.HTMLLayout(以HTML表格形式布局)
  2. org.apache.log4j.PatternLayout(可以灵活地指定布局模式)
  3. org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串)
  4. org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)
HTMLLayout选项
  • LocationInfo=true:输出java文件名称和行号,默认值是false。

  • Title=My Logging: 默认值是Log4J Log Messages。

PatternLayout选项

ConversionPattern=%m%n:设定以怎样的格式显示消息。

格式化符号说明:

%p:输出日志信息的优先级,即DEBUG,INFO,WARN,ERROR,FATAL。

%d:输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,如:%d{yyyy/MM/dd HH:mm:ss,SSS}。

%r:输出自应用程序启动到输出该log信息耗费的毫秒数。

%t:输出产生该日志事件的线程名。

%l:输出日志事件的发生位置,相当于%c.%M(%F:%L)的组合,包括类全名、方法、文件名以及在代码中的行数。例如:test.TestLog4j.main(TestLog4j.java:10)。

%c:输出日志信息所属的类目,通常就是所在类的全名。

%M:输出产生日志信息的方法名。

%F:输出日志消息产生时所在的文件名称。

%L::输出代码中的行号。

%m::输出代码中指定的具体日志信息。

%n:输出一个回车换行符,Windows平台为"rn",Unix平台为"n"。

%x:输出和当前线程相关联的NDC(嵌套诊断环境),尤其用到像java servlets这样的多客户多线程的应用中。

%%:输出一个"%"字符。

另外,还可以在%与格式字符之间加上修饰符来控制其最小长度、最大长度、和文本的对齐方式。如:

  1. c:指定输出category的名称,最小的长度是20,如果category的名称长度小于20的话,默认的情况下右对齐。

2)%-20c:"-"号表示左对齐。

3)%.30c:指定输出category的名称,最大的长度是30,如果category的名称长度大于30的话,就会将左边多出的字符截掉,但小于30的话也不会补空格。

三、Log4j日志文件滚动配置

线上Flink程序的日志输出一般都需要配置滚动,不然很容易出现打爆日志的情况,对集群稳定性造成影响。因此需要配置log4j的滚动日志输出,下面给出我实际使用的log4j滚动日志配置:

# This affects logging for both user code and Flink
rootLogger.level = INFO
rootLogger.appenderRef.file.ref = MainAppender

# Log all infos in the given file
# 指定appender的名称
appender.main.name = MainAppender
# appender的类型配置为滚动
appender.main.type = RollingFile
# 默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容
appender.main.append = false
# 日志文件名
appender.main.fileName = ${sys:log.file}
# 指定当发生文件滚动时,文件重命名规则
appender.main.filePattern = ${sys:log.file}.%i
# 设定以怎样的格式显示消息
appender.main.layout.type = PatternLayout
# 输出模板
appender.main.layout.pattern = %d{yyyy-MM-dd HH:mm:ss,SSS} %-5p %-60c %x - %m%n
# 指定记录文件的保存策略,该策略主要是完成周期性的日志文件保存工作
appender.main.policies.type = Policies
# 基于日志文件大小的触发策略
appender.main.policies.size.type = SizeBasedTriggeringPolicy
# 当日志文件大小大于size指定的值时,触发滚动
appender.main.policies.size.size = 100MB
# 文件保存的覆盖策略
appender.main.strategy.type = DefaultRolloverStrategy
# 生成分割(保存)文件的个数
appender.main.strategy.max = 10

四、附:Log4j比较全面的配置

Log4j配置文件实现了输出到控制台、文件、回滚文件、发送日志邮件、输出到数据库日志表、自定义标签等全套功能。

log4j.rootLogger=DEBUG,console,dailyFile,im

log4j.additivity.org.apache=true

控制台(console)

log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.Threshold=DEBUG
log4j.appender.console.ImmediateFlush=true
log4j.appender.console.Target=System.err
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=[%-5p] %d(%r) --> [%t] %l: %m %x %n

日志文件(logFile)

log4j.appender.logFile=org.apache.log4j.FileAppender
log4j.appender.logFile.Threshold=DEBUG
log4j.appender.logFile.ImmediateFlush=true
log4j.appender.logFile.Append=true
log4j.appender.logFile.File=D:/logs/log.log4j
log4j.appender.logFile.layout=org.apache.log4j.PatternLayout
log4j.appender.logFile.layout.ConversionPattern=[%-5p] %d(%r) --> [%t] %l: %m %x %n

回滚文件(rollingFile)

log4j.appender.rollingFile=org.apache.log4j.RollingFileAppender
log4j.appender.rollingFile.Threshold=DEBUG
log4j.appender.rollingFile.ImmediateFlush=true
log4j.appender.rollingFile.Append=false
log4j.appender.rollingFile.File=D:/logs/log.log4j
log4j.appender.rollingFile.MaxFileSize=200KB
log4j.appender.rollingFile.MaxBackupIndex=50
log4j.appender.rollingFile.layout=org.apache.log4j.PatternLayout
log4j.appender.rollingFile.layout.ConversionPattern=[%-5p] %d(%r) --> [%t] %l: %m %x %n

定期回滚日志文件(dailyFile)

log4j.appender.dailyFile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.dailyFile.Threshold=DEBUG
log4j.appender.dailyFile.ImmediateFlush=true
log4j.appender.dailyFile.Append=true
log4j.appender.dailyFile.File=D:/logs/log.log4j
log4j.appender.dailyFile.DatePattern='.'yyyy-MM-dd
log4j.appender.dailyFile.layout=org.apache.log4j.PatternLayout
log4j.appender.dailyFile.layout.ConversionPattern=[%-5p] %d(%r) --> [%t] %l: %m %x %n

应用于socket

log4j.appender.socket=org.apache.log4j.RollingFileAppender
log4j.appender.socket.RemoteHost=localhost
log4j.appender.socket.Port=5001
log4j.appender.socket.LocationInfo=true

Set up for Log Factor 5

log4j.appender.socket.layout=org.apache.log4j.PatternLayout
log4j.appender.socket.layout.ConversionPattern=[%-5p] %d(%r) --> [%t] %l: %m %x %n

Log Factor 5 Appender

log4j.appender.LF5_APPENDER=org.apache.log4j.lf5.LF5Appender
log4j.appender.LF5_APPENDER.MaxNumberOfRecords=2000

发送日志到指定邮件

log4j.appender.mail=org.apache.log4j.net.SMTPAppender
log4j.appender.mail.Threshold=FATAL
log4j.appender.mail.BufferSize=10
log4j.appender.mail.From = xxx@mail.com
log4j.appender.mail.SMTPHost=mail.com
log4j.appender.mail.Subject=Log4J Message
log4j.appender.mail.To= xxx@mail.com
log4j.appender.mail.layout=org.apache.log4j.PatternLayout
log4j.appender.mail.layout.ConversionPattern=[%-5p] %d(%r) --> [%t] %l: %m %x %n

应用于数据库

log4j.appender.database=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.database.URL=jdbc:mysql://localhost:3306/test
log4j.appender.database.driver=com.mysql.jdbc.Driver
log4j.appender.database.user=root
log4j.appender.database.password=
log4j.appender.database.sql=INSERT INTO LOG4J (Message) VALUES('=[%-5p] %d(%r) --> [%t] %l: %m %x %n')
log4j.appender.database.layout=org.apache.log4j.PatternLayout
log4j.appender.database.layout.ConversionPattern=[%-5p] %d(%r) --> [%t] %l: %m %x %n

自定义Appender

log4j.appender.im = net.cybercorlin.util.logger.appender.IMAppender
log4j.appender.im.host = mail.cybercorlin.net
log4j.appender.im.username = username
log4j.appender.im.password = password
log4j.appender.im.recipient = corlin@cybercorlin.net
log4j.appender.im.layout=org.apache.log4j.PatternLayout
log4j.appender.im.layout.ConversionPattern=[%-5p] %d(%r) --> [%t] %l: %m %x %n
  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
下是一个使用 log4j.xml 配置异步日志示例: ```xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false"> <appender name="ASYNC" class="org.apache.log4j.AsyncAppender"> <param name="BufferSize" value="1024" /> <appender-ref ref="CONSOLE" /> <appender-ref ref="FILE" /> </appender> <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender"> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss,SSS} [%t] %-5p %c{1}:%L - %m%n" /> </layout> </appender> <appender name="FILE" class="org.apache.log4j.RollingFileAppender"> <param name="File" value="logs/app.log" /> <param name="MaxFileSize" value="10MB" /> <param name="MaxBackupIndex" value="10" /> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss,SSS} [%t] %-5p %c{1}:%L - %m%n" /> </layout> </appender> <root> <level value="INFO" /> <appender-ref ref="ASYNC" /> </root> </log4j:configuration> ``` 在这个配置文件中,我们定义了三个 Appender:一个 ConsoleAppender 和一个 RollingFileAppender,以及一个 AsyncAppender,将其它两个 Appender 作为子 Appender 异步输出日志。AsyncAppender 的 BufferSize 属性定义了缓冲区大小,一旦达到这个大小,就会异步输出缓冲区中的日志。 在 root 节点中,我们将日志级别设为 INFO,同时将 AsyncAppender 指定为使用的 Appender。这样,在应用程序中记录的所有日志都会被异步输出到 Console 和 RollingFile 中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JermeryBesian

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值