错误:使用log4j时“setFile(null,false)调用失败”

我在项目的源文件夹中添加了log4j.properties文件,但我仍然收到log4j:错误。

这是我的Log4j.properties文件:

  .rootCategory=DEBUG, R, O # Stdout log4j.appender.O=org.apache.log4j.ConsoleAppender log4j.appender.O=log44j.log # File log4j.appender.R=org.apache.log4j.RollingFileAppender log4j.appender.R.File=log4j.log # Control the maximum log file size log4j.appender.R.MaxFileSize=100KB # Archive log files (one backup file here) log4j.appender.R.MaxBackupIndex=1 log4j.appender.R.layout=org.apache.log4j.PatternLayout log4j.appender.O.layout=org.apache.log4j.PatternLayout log4j.appender.R.layout.ConversionPattern=[%d{ISO8601}]%5p%6.6r[%t]%x - %C.%M(%F:%L) - %m%n log4j.appender.O.layout.ConversionPattern=[%d{ISO8601}]%5p%6.6r[%t]%x - %C.%M(%F:%L) - %m%n # Define the root logger with appender file logDir = ../logs log4j.rootLogger = DEBUG, FILE # Define the file appender log4j.appender.FILE=org.apache.log4j.FileAppender log4j.appender.FILE.File=logs/${file.name} log4j.appender.FILE.Append=false # Define the layout for file appender log4j.appender.FILE.layout=org.apache.log4j.PatternLayout log4j.appender.FILE.layout.conversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout 

这是我得到的Javaexception:

 log4j:ERROR setFile(null,false) call failed. java.io.FileNotFoundException: logs (Access is denied) at java.io.FileOutputStream.open(Native Method) at java.io.FileOutputStream.(FileOutputStream.java:194) at java.io.FileOutputStream.(FileOutputStream.java:116) at org.apache.log4j.FileAppender.setFile(FileAppender.java:294) at org.apache.log4j.FileAppender.activateOptions(FileAppender.java:165) at org.apache.log4j.config.PropertySetter.activate(PropertySetter.java:307) at org.apache.log4j.config.PropertySetter.setProperties(PropertySetter.java:172) at org.apache.log4j.config.PropertySetter.setProperties(PropertySetter.java:104) at org.apache.log4j.PropertyConfigurator.parseAppender(PropertyConfigurator.java:809) at org.apache.log4j.PropertyConfigurator.parseCategory(PropertyConfigurator.java:735) at org.apache.log4j.PropertyConfigurator.configureRootCategory(PropertyConfigurator.java:615) at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:502) at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:547) at org.apache.log4j.helpers.OptionConverter.selectAndConfigure(OptionConverter.java:483) at org.apache.log4j.LogManager.(LogManager.java:127) at org.apache.log4j.Logger.getLogger(Logger.java:104) at lib.Dashboard.Reports.(Reports.java:34) at testcases.AmazonDashboard.TC_DB17.main(TC_DB17.java:54) AmazonDashboardTC_DB17Exception in thread "main" java.lang.NullPointerException at testcases.AmazonDashboard.TC_DB17.main(TC_DB17.java:131) 

请让我知道,如何解决此exception,因为我已尝试将我的属性文件放在根文件夹中,现在我已放入源文件夹但在这两种情况下我都得到了上述exception。

我怀疑变量${file.name}未正确替换。 结果, log4j.appender.FILE.File的值变为logs/ 。 因此,Java尝试创建名为logs/的日志文件,但可能是现有目录,因此您将获得exception。

作为快速补救措施,将log4j.appender.FILE.File设置更改为按绝对路径指向文件,例如/tmp/mytest.log 。 你不应该得到例外。

之后,您可以继续调试在运行时环境中未正确替换${file.name}原因。

我有同样的问题。 以下是适合我的解决方案:只需将您的属性文件路径放在cmd行中:

 -Dlog4j.configuration= (ex: log4j.properties) 

希望对你有帮助

java.io.FileNotFoundException:logs(访问被拒绝)

– >您的应用无法写入’logs’文件夹。 与log4j配置无关。 如果该文件夹不存在,请创建该文件夹,并为其提供足够的权限以便Web应用程序写入该文件夹。

我只是为“logs”文件夹添加写入权限,它对我有用

添加写入权限

如果它是window7(就像我的),没有管理权限就无法在C:驱动器上写一个文件

只需在log4j.properties文件中提供另一个文件夹

设置文件的名称

你可以用notepad ++看到log4j.appender.FILE.File = C:\ server \ log.out

此错误即将发生,因为您提供的appender文件位置无法通过当前用户访问权限访问。

快速解决方案 ,将log4j.appender.FILE.File设置更改为使用绝对路径指向文件,该路径可以访问您已登录的当前用户,例如/tmp/myapp.log 。 现在你不应该得到一个错误。

看看错误 – ‘log4j:ERROR setFile(null,false)调用失败。 java.io.FileNotFoundException:logs(访问被拒绝)’

似乎有一个名为’logs’的日志文件被拒绝访问,即它没有足够的权限来写日志。 尝试为’logs’日志文件提供写权限。 希望能帮助到你。

请将您的日志文件位置更改为另一个驱动器。 它会工作。

发生这种情况是创建日志文件的权限。

为了防止这种情况,我将log4j.properties文件中包含目录$ {kafka.logs.dir}的所有值更改为我自己的目录。 例如D:/ temp / ……

尝试使用sudo(超级用户)执行命令,这对我有用:)
运行:$ sudo your_command
之后输入超级用户密码。 就这样..