Leo*_*rak 42 java logging log4j log4j2
我只是想知道是否有办法为LOG4J中的属性替换提供默认值?
我想在java系统属性中传递文件路径,然后将其与"$ {env:mySystemProperty}"一起使用.但是如果开发人员忘记设置此属性呢?然后我想在log4j2.xml中定义一些有意义的默认值.
知道如何实现这个功能吗?
编辑:
env替换对我不起作用:
standalone.conf
-DoauthLoginLogPath=/path/oauth2.log
Run Code Online (Sandbox Code Playgroud)
log44j2.xml
<Appender type="File" name="File" fileName="${env:oauthLoginLogPath}" immediateFlush="true">
<Appender type="File" name="File" fileName="${sys:oauthLoginLogPath}" immediateFlush="true">
Run Code Online (Sandbox Code Playgroud)
我可以在wildfly控制台中看到该属性,我重新启动了服务器,但我无法完成它.
Rem*_*pma 65
默认属性映射
查看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
Run Code Online (Sandbox Code Playgroud)
然后,如果您使用系统属性启动应用程序,将首先在系统属性中查找-DoauthLoginLogPath=/path/oauth2.log
File appender fileName
值,但如果失败,它将回Properties
退到log4j2.xml配置文件顶部的部分中定义的属性.
排队
第二种方法是提供内联的默认值:
<Appender type="File" name="File" fileName="${sys:oauthLoginLogPath:-default/location/of/oauth2.log}">
Run Code Online (Sandbox Code Playgroud)
通常所有Log4j2查找都遵循以下模式:${type:key:-defaultValue}
.
环境vs系统
顺便说一句,env
前缀用于环境变量(如Windows上的%PATH%),与sys
Java系统属性无关.另见http://logging.apache.org/log4j/2.x/manual/lookups.html
GoG*_*ris 17
您可以使用相同的${sys:propName:-default}
语法.注意': - ',它被称为" 变量默认值分隔符 ".在默认的"价值变量默认值分隔符 "是:-
,在庆典和其他的*nix炮弹.
您可以在Str4ubstitutor类的Log4j 2文档中阅读更多相关信息.
要使用相同的示例:
<Configuration status="debug">
...
<Appenders>
<Appender type="File" name="File"
fileName="${sys:oauthLoginLogPath:-default/location/of/oauth2.log}">
....
</Appenders>
</Configuration>
Run Code Online (Sandbox Code Playgroud)