如何让log4j fileAppender正确地转义$ {java.io.tmpdir}的内容

时间:2009-07-13 13:48:36

标签: java log4j

我有一个像这样配置的log4j RollingFileAppender

<appender name="fileAppender" class="org.apache.log4j.RollingFileAppender">
    <param name="MaxBackupIndex" value="10" />
    <param name="File" value="${java.io.tmpdir}\\myLogFile.log" />
</appender>

我的问题是java.io.tmpdir映射到C:\ Temp并且log4j没有转义反斜杠。 当我开始这个过程时,我看到以下错误

java.io.FileNotFoundException: c:   emp\myLogFile.log (The filename, directory name, or volume label syntax is incorrect)
at java.io.FileOutputStream.openAppend(Native Method)
at java.io.FileOutputStream.<init>(Unk

我无法在所有用户的计算机上修改环境变量,我也不想对日志路径进行硬编码。

我可以将自己的扩展名编写到RollingFileAppender来修复此问题,但我希望有一个预先存在的方法。

我最好的选择是什么?

2 个答案:

答案 0 :(得分:2)

你试过这个吗?

<param name="File" value="${java.io.tmpdir}/myLogFile.log" />

您不需要在XML文件中转义反斜杠,并且log4j应该完全能够将该路径转换为您需要的任何特定于平台的路径(Windows上的反斜杠)。

答案 1 :(得分:1)

如果您使用属性文件而不是XML文件,则可能不会发生这种情况。查看log4j源代码,它接收DOMConfigurator正在进行导致错误的TAB替换。 PropertyConfigurator不执行此替换。试试吧?

您也可以将java.io.tmpdir更改为C:/ Temp并在适当的地方使用/而不是\。这听起来不像是你的选择吗?