【发布时间】:2014-11-10 16:00:06
【问题描述】:
我需要允许部署者为我们的 Tomcat webapp log4j2 RollingFileLogger 指定路径。我想使用 JNDI,但如果必须,可以使用普通的 -D 参数。 This apache page 似乎很好地解释了事情。
唯一的问题是它不起作用。我承认我在 JNDI 方面没有特别的经验,但我什至无法让一个简单的 JVM 参数工作。阅读Property Substitution 我得到的印象是我不能只将 $${jndi:xxxx} 放在文件名属性中,而是应该使用 ${xxx} 属性替换。不幸的是,虽然该属性替换工作正常,但没有查找 jndi 或 env 解决。
log4j2.xml:
<Properties>
<Property name="filename">$${jndi:logPath/directory}/ief.log</Property>
</Properties>
....
<RollingFile name="RollingFileLogger" fileName="${filename}" immediateFlush="false" append="true"
结果:
2014-09-16 14:44:46,284 ERROR Unable to create file ${jndi:logPath/directory}/ief.log java.io.IOException: The filename, directory name, or volume label syntax is incorrect
如您所见,该属性已被替换,但尚未完成查找。我不确定 context.xml 条目应该是什么样子。但我最好的猜测是:
<Resource name="logPath"
auth="Container"
directory="/tmp" />
我使用的是 log4j 2.0 版,但我相当肯定这是我的误解,而不是错误。任何帮助清除我做错的事情将不胜感激。
【问题讨论】: