log4j写入Windows共享

时间:2010-10-20 15:34:34

标签: windows log4j

我在Windows机器上运行了一个java应用程序。

长话短说,我们有一个约定,我们在每台机器上放置日志文件:

\\%COMPUTERNAME%\Logs\<AppNameHere>

所以我使用-Dmachine.name =“%COMPUTERNAME%”将我的Java应用程序配置为启动,然后在我的log4j.properties文件中指定

log4j.appender.R.File = \\${machine.name}\Logs\MyVerySpecialApplicationName\log.log

但是当我运行我的应用程序时,我没有看到该目录/文件出现(应用程序所做的第一件事就是记录启动消息)。

所以我的猜测是log4j / java无法处理特定于Windows的UNC路径。

其他人遇到这个问题并找到解决方法吗?

2 个答案:

答案 0 :(得分:2)

我查看了Log4j的源代码。它似乎使用java.io.File来保存对您指定的文件名的引用。

此外,java.io.File的Javadoc声明File(Log4J使用)的构造函数支持UNC路径。

所以,从表面上看,没有理由说你的配置不起作用; 但是 - 这是需要注意的重点 - Java在SMB上的文件I / O问题上有很长的历史(这正是你想要做的)。

我的建议:

  1. 通过指定-Dlog4j.debug=true启动您的应用程序。系统属性将使Log4J吐出大量调试信息,以帮助您跟踪问题。
  2. 尝试使用相同的配置,除了不是引用带有UNC前缀的文件,只需映射驱动器(我知道您在Windows上运行)。如果事情适用于映射驱动器,则意味着使用UNC前缀的东西是问题的根源(尽管我对此表示怀疑)。
  3. 让我们知道事情是如何发展的。祝好运。 艾萨克

答案 1 :(得分:1)

您需要为每个人提出两个反弹,如下面的配置

log4j.appender.Log_Arquivo.File=\\\\172.31.88.168\\server10\\soma_10\\logs\\soma_10.log

我希望这对你有所帮助。