您的位置:首页 > 其它

logback系列之二:输出日志到文件

2016-03-25 00:00 531 查看

logback系列之一:输出日志到控制台
类似,改动的地方:

1. logback[-test].xml文件:

Java代码



<appender name="fileAppender" class="ch.qos.logback.core.FileAppender">

<file>/logs/granularity.log</file>

<encoder><!-- 必须指定,否则不会往文件输出内容 -->

<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{5} - %msg%n</pattern>

</encoder>

<append>true</append>

<prudent>false</prudent>

</appender>

<root level="DEBUG">

<appender-ref ref="fileAppender" />

</root>

调用测试类的方法,生成granularity.log文件。

附:

①. prudent:小心的,慎重的。如果设置为true,不同JVM的file appenders能够安全地将日志输出到同一个文件中。

这是通过锁定文件通道实现的:

Java代码



protected void writeOut(E event) throws IOException {

if (prudent) {

safeWrite(event);

} else {

super.writeOut(event);

}

}

private void safeWrite(E event) throws IOException {

ResilientFileOutputStream resilientFOS = (ResilientFileOutputStream) getOutputStream();

FileChannel fileChannel = resilientFOS.getChannel();

if (fileChannel == null) {

return;

}

FileLock fileLock = null;

try {

fileLock = fileChannel.lock(); // 加锁

long position = fileChannel.position();

long size = fileChannel.size();

if (size != position) {

fileChannel.position(size);

}

super.writeOut(event);

} finally {

if (fileLock != null) {

fileLock.release(); // 释放锁

}

}

}

②. 当prudent为true时,如果append设置为false,会被强行转成true。

这是在start方法中处理的:

Java代码



if (prudent) {

if (!isAppend()) {

setAppend(true);

addWarn("Setting \"Append\" property to true on account of \"Prudent\" mode");

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: