Log4j FileAppender文件输出
精华
小牛编辑
95浏览
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