当前位置: 首页 > 教程 > Log4j >

Log4j FileAppender文件输出

精华
小牛编辑
97浏览
2023-03-14

Log4j 提供 org.apache.log4j.FileAppender 类将您的日志信息写入文件。

FileAppender 参数

FileAppender 具有以下可配置参数:

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

FileAppender 例子

让我们看一个 FileAppender 的例子:

log4j.properties文件内容:

# Define the root logger with appender file  
log = d:/log4j  
  
# 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  

 Example测试类:

package cn.xnip;

import org.apache.log4j.Logger;

import java.io.IOException;
import java.sql.SQLException;

public class Example {  
  
   static Logger log = Logger.getLogger(Example.class.getName());  
     
   public static void main(String[] args)throws IOException, SQLException {  
      log.debug("Hello this is a debug message");  
      log.info("Hello this is an info message");  
   }  
} 

在d:/log4j目录下会生成log.out文件,内容如下:

Hello this is a debug message
Hello this is an info message

如果你换成 log4j.xml配置,且效果和 log4j.properties 文件一样,那么可以参考下面的内容:

<?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 参数之外,只有一个重要参数:

DatePattern:这指示何时滚动保存文件和要遵循的命名约定。默认情况下,在每天0点执行滚动保存文件。

DatePattern 用于使用以下模式之一控制滚动保存计划:

Date Pattern 描述
'.' yyyy-MM 月末和下月初转存。
'.' yyyy-MM-dd 每天午夜滚动保存。它是默认值。
'.' yyyy-MM-dd-a 每天中午和晚点0点进行滚动保存。
'.' yyyy-MM-dd-HH 每小时滚动保存一次。
'.' yyyy-MM-dd-HH-mm 每分钟滚动保存一次。
'.' yyyy-ww 根据区域设置,在每周的第一天执行滚动保存。

让我们看一个示例配置文件log4j.properties来生成每天中午和晚上0点滚动保存日志文件:

# 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-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