离线下载
PDF版 ePub版

极客学院团队出品 · 更新于 2018-11-28 11:00:42

使用文件记录日志

使用 org.apache.Log4j.FileAppender 将日志记录到文件。

FileAppender 配置

FileAppender 拥有如下配置参数:

属性 描述
immediateFlush 该标志位默认为 true,意味着每次日志追加操作都将输出流刷新至文件。
encoding 可以使用任何编码,默认情况下使用平台相关的编码。
threshold appender 对象的阀值。
Filename 日志文件名。
fileAppend 该值默认为 true,其含义是让日志追加至文件末尾。
bufferedIO 该标志位表示是否打开缓冲区写,缺省为 false。
bufferSize 如果开启缓冲区 I/O,该属性指示缓冲区大小,缺省为 8 kb。

下面是一个使用 FileAppender 的示例配置文件 Log4j.properties

# Define the root logger with appender file
Log4j.rootLogger = DEBUG, FILE

# Define the file appender
Log4j.appender.FILE=org.apache.Log4j.FileAppender

# Set the name of the file
Log4j.appender.FILE.File=${log}/log.out

# Set the immediate flush to true (default)
Log4j.appender.FILE.ImmediateFlush=true

# Set the threshold to debug mode
Log4j.appender.FILE.Threshold=debug

# Set the append to false, overwrite
Log4j.appender.FILE.Append=false

# Define the layout for file appender
Log4j.appender.FILE.layout=org.apache.Log4j.PatternLayout
Log4j.appender.FILE.layout.conversionPattern=%m%n

如果您需要一个和 Log4j.properties 文件功能类似的 XML 配置文件,如下所示:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE Log4j:configuration SYSTEM "Log4j.dtd">
<Log4j:configuration>

<appender name="FILE" class="org.apache.Log4j.FileAppender">

   <param name="file" value="${log}/log.out"/>
   <param name="immediateFlush" value="true"/>
   <param name="threshold" value="debug"/>
   <param name="append" value="false"/>

   <layout class="org.apache.Log4j.PatternLayout">
      <param name="conversionPattern" value="%m%n"/>
   </layout>
</appender>

<logger name="Log4j.rootLogger" additivity="false">
   <level value="DEBUG"/>
   <appender-ref ref="FILE"/>
</logger>

</Log4j:configuration>

您可以使用上述配置尝试示例程序一章中的例子。

使用多个文件记录日志

您可能因为某些原因,需要将日志写入多个文件,比如当文件大小达到一定阀值时。

为了将日志写入多个文件,您需要使用 org.apache.Log4j.RollingFileAppender,该类继承了 FileAppender 类,继承了它的所有属性。

除了上述提到的 FileAppender 类的属性,该类还包括如下可配置的属性:

属性 描述
maxFileSize 这是文件大小的关键值,大于该值时,文件会回滚。该值默认为 10 MB。
maxBackupIndex 该值表示备份文件的个数,默认为 1。

下面是为 RollingFileAppender 定义的示例配置文件 Log4j.properties

# Define the root logger with appender file
Log4j.rootLogger = DEBUG, FILE

# Define the file appender
Log4j.appender.FILE=org.apache.Log4j.RollingFileAppender

# Set the name of the file
Log4j.appender.FILE.File=${log}/log.out

# Set the immediate flush to true (default)
Log4j.appender.FILE.ImmediateFlush=true

# Set the threshold to debug mode
Log4j.appender.FILE.Threshold=debug

# Set the append to false, should not overwrite
Log4j.appender.FILE.Append=true

# Set the maximum file size before rollover
Log4j.appender.FILE.MaxFileSize=5KB

# Set the the backup index
Log4j.appender.FILE.MaxBackupIndex=2

# Define the layout for file appender
Log4j.appender.FILE.layout=org.apache.Log4j.PatternLayout
Log4j.appender.FILE.layout.conversionPattern=%m%n

如果您想使用 XML 配置文件,可以像上一节一样生成 XML 配置文件,只需添加和 RollingFileAppender 相关的配置即可。

该示例配置文件展示了每个日志文件最大为 5 MB,如果超过该最大值,则会生成一个新的日志文件。由于 maxBackupIndex 的值为 2,当第二个文件的大小超过最大值时,会擦去第一个日志文件的内容,所有的日志都回滚至第一个日志文件。

您可以使用上述配置尝试示例程序一章中的例子。

逐日生成日志文件

您也许需要逐日生成日志文件,以此更加整洁的记录日志信息。

为了逐日生成日志文件,需要使用 org.apache.Log4j.DailyRollingFileAppender,,该类继承了 FileAppender 类,继承了它的所有属性。

除了上述提到的 FileAppender 类的属性,该类多包含了一个重要属性:

属性 描述
DatePattern 该属性表明什么时间回滚文件,以及文件的命名约定。缺省情况下,在每天午夜回滚文件。

DatePattern 使用如下规则控制回滚计划:

DatePattern 描述
'.' yyyy-MM 在本月末,下月初回滚文件。
'.' yyyy-MM-dd 在每天午夜回滚文件,这是缺省值。
'.' yyyy-MM-dd-a 在每天中午和午夜回滚文件。
'.' yyyy-MM-dd-HH 在每个整点回滚文件。
'.' yyyy-MM-dd-HH-mm 每分钟回滚文件。
'.' yyyy-ww 根据地域,在每周的第一天回滚。

下述 Log4j.properties 示例文件产生的日志文件在每天中午和午夜回滚:

# Define the root logger with appender file
Log4j.rootLogger = DEBUG, FILE

# Define the file appender
Log4j.appender.FILE=org.apache.Log4j.DailyRollingFileAppender

# Set the name of the file
Log4j.appender.FILE.File=${log}/log.out

# Set the immediate flush to true (default)
Log4j.appender.FILE.ImmediateFlush=true

# Set the threshold to debug mode
Log4j.appender.FILE.Threshold=debug

# Set the append to false, should not overwrite
Log4j.appender.FILE.Append=true

# Set the DatePattern
Log4j.appender.FILE.DatePattern='.' yyyy-MM-dd-a

# Define the layout for file appender
Log4j.appender.FILE.layout=org.apache.Log4j.PatternLayout
Log4j.appender.FILE.layout.conversionPattern=%m%n

如果您想使用 XML 配置文件,可以像上一节一样生成 XML 配置文件,只需添加和 DailyRollingFileAppender 相关的配置即可。

您可以使用上述配置尝试示例程序一章中的例子。