Java Log4j-Can';找不到日志文件

Java Log4j-Can';找不到日志文件,java,logging,log4j,Java,Logging,Log4j,当我将一个应用程序部署到运行JRE 1.7的其他计算机上时,它会崩溃,这使我遇到了麻烦。当我在我的电脑上的NetBeans内部(甚至直接从JAR文件)运行这个时,一切都很好。但在另一台计算机上,它在执行过程中的特定事件(点击按钮)时失败 因此,我学习了如何使用log4j库进行日志记录。这给了我一些关于我的应用程序中一个问题的信息,并且日志记录也在我的计算机上完美地工作。但是当我将JAR文件部署到其他只运行JRE(java7update17)的计算机上时,我找不到任何日志文件的痕迹 这是我的log

当我将一个应用程序部署到运行JRE 1.7的其他计算机上时,它会崩溃,这使我遇到了麻烦。当我在我的电脑上的NetBeans内部(甚至直接从JAR文件)运行这个时,一切都很好。但在另一台计算机上,它在执行过程中的特定事件(点击按钮)时失败

因此,我学习了如何使用log4j库进行日志记录。这给了我一些关于我的应用程序中一个问题的信息,并且日志记录也在我的计算机上完美地工作。但是当我将JAR文件部署到其他只运行JRE(java7update17)的计算机上时,我找不到任何日志文件的痕迹

这是我的log4j.properties文件:

 # Root logger option 
 log4j.rootLogger=INFO, file, stdout  

 # Direct log messages to a log file log4j.appender.file=org.apache.log4j.RollingFileAppender
 log4j.appender.file.File=C:\logging.log
 log4j.appender.file.MaxFileSize=1MB
 log4j.appender.file.MaxBackupIndex=1
 log4j.appender.file.layout=org.apache.log4j.PatternLayout
 log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss}
 %-5p %c{1}:%L - %m%n  

 # Direct log messages to stdout log4j.appender.stdout=org.apache.log4j.ConsoleAppender
 log4j.appender.stdout.Target=System.out
 log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
 log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss}
 %-5p %c{1}:%L - %m%n
在我的计算机上,我可以看到项目文件夹中的logging.log文件。从这个意义上说,一切都是完美的。但是,在用户PC上,根本没有该文件的迹象。不是在C:\(我认为应该是的地方),不是在C:\ProgramFiles(x86)或其他任何地方。我已经对我的硬盘做了一次彻底的搜索,但什么也没找到

这个文件应该存储在哪里?我的属性设置正确吗?非常困惑


谢谢大家!

如果有人偶然发现这篇文章,我想记录下我是如何解决的

首先,正如DwB正确指出的,问题确实在于用户的帐户没有足够的权限创建logging.log文件。在我的代码中,我有一个正在执行的catch块,其中包含在发生文件写入错误时退出系统的代码。因为日志细节正是我试图写的,所以我无法得到任何输出来提示我这是问题的根源

一旦我意识到这一点,我就必须改变我写日志文件的位置。与其将其写入根目录(C:\)或jar文件所在的文件夹(C:\Program Files\),两者都是我无法保证用户拥有完全权限的地方,我决定在他们的AppData路径中创建一个文件夹

我的程序中的第一行现在是对该函数的调用(使用通用名称MyProgram):

这将在\AppData\Roaming的用户帐户中创建一个名为MyProgram的文件夹。由于此路径是用户帐户路径的一部分,我相信用户将始终能够对其进行写入,从而解决权限问题。如果有人不知道,请告诉我

然后,在log4j.properties文件中,我更改了行

log4j.appender.file.File=logging.log

这会将文件定向到我刚刚创建的文件夹

一旦我这样做了,并添加了一些位置良好的日志消息,我就能够找到我的其他问题,现在一切正常


我希望这能帮助别人。如果有人有任何建议,请发表。

目标计算机上的用户可以在c驱动器的根目录中创建文件吗?首先,属性文件中的反斜杠需要加倍:
c:\\logging.log
。或者使用前斜杠,因为windows将接受它们:
C:/logging.log
DwB-是的,它们对C:\具有完全权限。我不认为这是权限问题。Kenster-我试图以两种方式(\\and simply/)更改该引用。当我这么做的时候,我得到了构建错误(在这两种情况下),日志记录甚至在我的计算机上也失败了。我更进一步,只是取出了C:\(将其保留为简单的logging.log),希望Java能将文件放在某个我可以搜索的地方。这在我的计算机上起作用(与以前完全相同),但在用户计算机上仍然存在完全相同的问题。DwB-更正。我检查了另一台电脑。虽然它们确实能够写入根文件夹,但Windows会让用户确认每次写入。这确实是问题所在。我更改了所有内容,在AppData/Roaming路径中创建了一个文件夹,并将日志文件重定向到了那里。现在我可以很好地看到日志文件了。我怀疑这也是我主要问题的根源。非常感谢。这是一个很大的进步。如果你把你的建议作为解决办法,我会接受的。谢谢
log4j.appender.file.File=logging.log
log4j.appender.file.File=${user.home}/Application Data/MyProgram/logging.log