log4j - 文件中的日志记录

要将日志记录信息写入文件,您必须使用 org.apache.log4j.FileAppender

FileAppender 配置

FileAppender 具有以下可配置参数:

属性 描述
immediateFlush 此标志默认设置为 true,这意味着每次执行附加操作时都会刷新到文件的输出流。
编码 可以使用任何字符编码。默认情况下,它是特定于平台的编码方案。
threshold 此附加器的阈值级别。
Filename 日志文件的名称。
fileAppend 默认情况下设置为 true,这意味着日志信息将附加到同一文件的末尾。
bufferedIO 此标志表示我们是否需要启用缓冲写入。默认情况下,它设置为 false。
bufferSize 如果启用了缓冲 I/O,则它表示缓冲区大小。默认情况下,它设置为 8kb。

以下是 FileAppender 的示例配置文件 log4j.properties

# 定义带有附加器文件的根记录器
log4j.rootLogger = DEBUG, FILE

# 定义文件附加器
log4j.appender.FILE=org.apache.log4j.FileAppender

# 设置文件的名称
log4j.appender.FILE.File=${log}/log.out

# 将立即刷新设置为 true(默认)
log4j.appender.FILE.ImmediateFlush=true

# 将阈值设置为调试模式
log4j.appender.FILE.Threshold=debug

# 将附加设置为 false,覆盖
log4j.appender.FILE.Append=false

# 定义布局文件附加器
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>

您可以使用上述配置尝试 log4j - 示例程序

在多个文件中记录日志

您可能出于某些原因想要将日志消息写入多个文件,例如,如果文件大小达到某个阈值。

要将日志信息写入多个文件,您必须使用 org.apache.log4j.RollingFileAppender 类,该类扩展了 FileAppender 类并继承了其所有属性。

除了上面提到的 FileAppender 参数外,我们还有以下可配置参数 −

属性 描述
maxFileSize 这是文件的临界大小,超过该大小文件将被滚动。默认值为 10 MB。
maxBackupIndex 此属性表示要创建的备份文件的数量。默认值为 1。

以下是 RollingFileAppender 的示例配置文件 log4j.properties

# 使用附加文件定义根记录器
log4j.rootLogger = DEBUG, FILE

# 定义文件附加器
log4j.appender.FILE=org.apache.log4j.RollingFileAppender

# 设置文件的名称
log4j.appender.FILE.File=${log}/log.out

# 将立即刷新设置为 true(默认)
log4j.appender.FILE.ImmediateFlush=true

# 将阈值设置为调试模式
log4j.appender.FILE.Threshold=debug

# 将附加设置为 false,不应覆盖
log4j.appender.FILE.Append=true

#设置滚动前的最大文件大小
log4j.appender.FILE.MaxFileSize=5MB

# 设置备份索引
log4j.appender.FILE.MaxBackupIndex=2

# 定义文件附加器的布局
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.conversionPattern=%m%n

如果您希望拥有 XML 配置文件,您可以生成与初始部分中提到的相同的文件,并仅添加与 RollingFileAppender 相关的附加参数。

此示例配置表明每个日志文件的最大允许大小为 5 MB。超过最大大小后,将创建一个新的日志文件。由于 maxBackupIndex 定义为 2,一旦第二个日志文件达到最大大小,第一个日志文件将被删除,此后,所有日志信息将回滚到第一个日志文件。

您可以尝试使用上述配置的 log4j - 示例程序

每日日志文件生成

可能需要每天生成日志文件以保持日志信息的清晰记录。

要每天将日志信息写入文件,您必须使用 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,用于生成在每天中午和午夜滚动的日志文件。

# 使用附加文件定义根记录器
log4j.rootLogger = DEBUG, FILE

# 定义文件附加器
log4j.appender.FILE=org.apache.log4j.DailyRollingFileAppender

# 设置文件的名称
log4j.appender.FILE.File=${log}/log.out

# 将立即刷新设置为 true(默认)
log4j.appender.FILE.ImmediateFlush=true

# 设置要调试的阈值模式
log4j.appender.FILE.Threshold=debug

# 将附加设置为 false,不应覆盖
log4j.appender.FILE.Append=true

# 设置 DatePattern
log4j.appender.FILE.DatePattern='.' yyyy-MM-dd-a

# 定义文件附加器的布局
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.conversionPattern=%m%n

如果您希望拥有 XML 配置文件,您可以生成与初始部分中提到的相同的文件,并仅添加与 DailyRollingFileAppender 相关的附加参数。

您可以使用上述配置尝试 log4j - Sample Program