log4j ConsoleAppender 跟随参数的目的是什么?
What is the purpose of log4j ConsoleAppender follow parameter?
在我下面的示例中,log4j 配置文件中有这样一行:
<Console name="ConsoleAppender" target="SYSTEM_OUT" follow="true">
这一行除了follow="true"
我都看懂了,我在官网看了这个参数的说明:This Website。我也尝试在其他网站上搜索,但无济于事。
描述是这样的:
这个描述让我感到困惑,“荣誉重新分配......”是什么意思,它的目的是什么,如果我将它更改为 false
.
会发生什么
System.out
属性不是read-only,可以通过System#setOut
重新赋值。使用 follow="true"
,appender 会将消息发送到 System.out
的 current 值,而使用 follow="false"
日志将发送到 System.out
.
您可以通过以下方式测试这两种行为:
// This performs automatic initialization
final Logger logger = LogManager.getLogger(Log4j2Test.class);
// System.out is attached to the JVM's `stdout`
logger.warn("Sent to 'stdout'");
// Reassignement of System.out
System.setOut(new PrintStream(new File("file.log")));
// System.out is attach to the file 'file.log'
logger.warn("Sent to 'file.log'");
从实用的角度来看,follow="true"
的性能比 follow="false"
差,System.out
很少 重新分配。
在我下面的示例中,log4j 配置文件中有这样一行:
<Console name="ConsoleAppender" target="SYSTEM_OUT" follow="true">
这一行除了follow="true"
我都看懂了,我在官网看了这个参数的说明:This Website。我也尝试在其他网站上搜索,但无济于事。
描述是这样的:
这个描述让我感到困惑,“荣誉重新分配......”是什么意思,它的目的是什么,如果我将它更改为 false
.
System.out
属性不是read-only,可以通过System#setOut
重新赋值。使用 follow="true"
,appender 会将消息发送到 System.out
的 current 值,而使用 follow="false"
日志将发送到 System.out
.
您可以通过以下方式测试这两种行为:
// This performs automatic initialization
final Logger logger = LogManager.getLogger(Log4j2Test.class);
// System.out is attached to the JVM's `stdout`
logger.warn("Sent to 'stdout'");
// Reassignement of System.out
System.setOut(new PrintStream(new File("file.log")));
// System.out is attach to the file 'file.log'
logger.warn("Sent to 'file.log'");
从实用的角度来看,follow="true"
的性能比 follow="false"
差,System.out
很少 重新分配。