Log4J2 属性替换 - 默认
Posted
技术标签:
【中文标题】Log4J2 属性替换 - 默认【英文标题】:Log4J2 property substitution - default 【发布时间】:2014-03-28 12:20:43 【问题描述】:我只是想知道是否有任何方法可以为 LOG4J 中的属性替换提供默认值?
我想在 java 系统属性中传递文件路径,然后将其与“$env:mySystemProperty”一起使用。但是如果开发者忘记设置这个属性怎么办?然后我想在 log4j2.xml 中定义一些有意义的默认值。
知道如何实现这个功能吗?
编辑:
env 替换对我不起作用:
standalone.conf
-DoauthLoginLogPath=/path/oauth2.log
log4j2.xml
<Appender type="File" name="File" fileName="$env:oauthLoginLogPath" immediateFlush="true">
<Appender type="File" name="File" fileName="$sys:oauthLoginLogPath" immediateFlush="true">
我可以在 wildfly 控制台中看到该属性,我重新启动了服务器但我无法完成它。
【问题讨论】:
【参考方案1】:默认属性映射
看着http://logging.apache.org/log4j/2.x/manual/configuration.html#PropertySubstitution 您可以在配置文件中指定默认属性映射。采用这种形式:
<Configuration status="debug">
<Properties>
<Property name="oauthLoginLogPath">default/location/of/oauth2.log</Property>
</Properties>
...
<Appenders>
<Appender type="File" name="File" fileName="$sys:oauthLoginLogPath">
....
</Configuration
然后,如果您使用系统属性-DoauthLoginLogPath=/path/oauth2.log
启动您的应用程序,文件附加程序fileName
的值将首先在系统属性中查找,但如果失败,它将回退到@987654326 中定义的属性@ 部分位于 log4j2.xml 配置文件的顶部。
内联
第二种方法是内联提供默认值:
<Appender type="File" name="File" fileName="$sys:oauthLoginLogPath:-default/location/of/oauth2.log">
通常所有 Log4j2 查找都遵循以下模式:$type:key:-defaultValue
。
环境与系统
顺便说一下,env
前缀是用于环境变量的(如 Windows 上的 %PATH%),与 Java 系统属性的 sys
无关。另见http://logging.apache.org/log4j/2.x/manual/lookups.html
【讨论】:
我不知道它在以前的版本中是否有效,但这不再有效。您必须在属性中使用 ':-' 来定义默认值。 如果有人正在努力设置内联默认值。请注意,该值是连字符后的值,例如如果我的默认路径是/var/log/myfile.log
,那么我会写$sys:oauthLoginLogPath:-/var/log/myfile.log
【参考方案2】:
您可以使用相同的$sys:propName:-default
syntax。注意':-',它被称为“变量默认值分隔符”。 “变量默认值分隔符”的默认值为:-
,如bash和其他*nix 贝壳。
您可以在 StrSubstitutor 类的 Log4j 2 文档中阅读更多相关信息。
使用相同的例子:
<Configuration status="debug">
...
<Appenders>
<Appender type="File" name="File"
fileName="$sys:oauthLoginLogPath:-default/location/of/oauth2.log">
....
</Appenders>
</Configuration>
【讨论】:
不幸的是,似乎在加载 log4j2.xml 文件时解析了默认值。为例如设置默认值不起作用通过线程上下文注入的变量。 更正:有效,但必须添加第二个$
,例如$$ctx:username:-UNKNOWN
:)以上是关于Log4J2 属性替换 - 默认的主要内容,如果未能解决你的问题,请参考以下文章
十一springboot 配置log4j2以及打包成zip文件
十springboot 配置log4j2以及打包成zip文件