我目前正在整理我们的一个内部工具的日志。我偶然发现在log4j2.xml
中的Logger
s内部使用${sys:logger.out.type}
。
下面是log4j2.xml
文件的副本:
<?xml version="1.0" encoding="UTF-8"?>
<configuration status="OFF">
<Appenders>
<Console name="stdout" target="SYSTEM_OUT">..
<PatternLayout pattern="..."/>
</Console>
<RollingFile name="FILE" fileName="${sys:microservice.log}" filePattern="${sys:microservice.log}.%i">
<PatternLayout>
<Pattern>...</Pattern>
</PatternLayout>
<Policies>
<OnStartupTriggeringPolicy />
<SizeBasedTriggeringPolicy size="300 MB" />
</Policies>
<DefaultRolloverStrategy max="5" />
</RollingFile>
</Appenders>
<Loggers>
<Logger name="org.springframework" level="warn" additivity="false">
<appender-ref ref="${sys:logger.out.type}"/>
</Logger>
<Logger name="org.springframework.jdbc.core" level="off" additivity="false">
<appender-ref ref="${sys:logger.out.type}"/>
</Logger>
<Logger name="org.springframework.jdbc.core.StatementCreatorUtils" level="off" additivity="false">
<appender-ref ref="${sys:logger.out.type}"/>
</Logger>
<Logger name="com.myOrgName" level="trace" additivity="false">
<appender-ref ref="${sys:logger.out.type}"/>
</Logger>
<Root level="info" additivity="false">
<appender-ref ref="${sys:logger.out.type}"/>
</Root>
</Loggers>
</configuration>
在我前面的StackOverflow问题中,一个非常友好的用户将我重定向到Log4j属性替换页面,以便更好地理解${sys:logger.out.type}
的语义。
在阅读了文档之后,我理解了sys
前缀是指一个系统属性,但是不太理解logger.out.type
的意思是什么?
这里插一句,它是指Logger
的输出类型吗?这可能意味着它是指名为stdout
的Console
元素吗?
感谢来自社区的任何见解和反馈。如果我的理解有任何错误,请纠正我,我也在学习:)谢谢!
1条答案
按热度按时间z2acfund1#
log4j 2.x配置文件中类似
${sys:logger.out.type}
的属性解析为Java系统属性logger.out.type
的值。在调用
java
命令时,通过将命令行参数-Dlogger.out.type=stdout
(或更一般的-D<property name>=<value>
)传递给JVM来设置系统属性。您还可以提供默认值,这样,如果没有为该系统属性设置值,
${sys:logger.out.type:-FILE}
将选择您的FILE
附加器。