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

时间:2012-05-21 08:52:33

标签: java file logging log4j

我在项目的源文件夹中添加了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

这是我得到的Java异常:

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.<init>(FileOutputStream.java:194)
    at java.io.FileOutputStream.<init>(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.<clinit>(LogManager.java:127)
    at org.apache.log4j.Logger.getLogger(Logger.java:104)
    at lib.Dashboard.Reports.<init>(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)

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

10 个答案:

答案 0 :(得分:24)

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

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

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

答案 1 :(得分:5)

我遇到了完全相同的问题。以下是适用于我的解决方案:只需将您的属性文件路径放在cmd行中:

-Dlog4j.configuration=<FILE_PATH>  (ex: log4j.properties)

希望这会对你有所帮助

答案 2 :(得分:2)

  

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

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

答案 3 :(得分:2)

&lt; p&gt;我只是为&#34; logs&#34;添加了写权限。文件夹,它适用于我&lt; / p&gt; &lt; p&gt;&lt; a href =&#34; https://i.stack.imgur.com/NdQLI.png" rel =&#34; nofollow noreferrer&#34;&gt;&lt; img src =&#34; https://i.stack.imgur.com/NdQLI.png" alt =&#34;添加写入权限&#34;&gt;&lt; / a&gt; &LT; / p为H.

答案 4 :(得分:1)

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

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

  

设置文件名称

你可以用notepad ++看到

log4j.appender.FILE.File = C:\ server \ log.out

答案 5 :(得分:0)

看一下错误 - 'log4j:ERROR setFile(null,false)调用失败。 java.io.FileNotFoundException:logs(拒绝访问)'

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

答案 6 :(得分:0)

请将您的日志文件位置更改为其他驱动器。它会起作用。

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

答案 7 :(得分:0)

为防止此问题,我将目录$ {kafka.logs.dir}中的log4j.properties文件中的所有值更改为我自己的目录。例如D:/ temp /...

答案 8 :(得分:0)

这是您的配置:

log4j.appender.FILE.File=logs/${file.name}

发生此错误:

java.io.FileNotFoundException: logs (Access is denied)

因此似乎未设置变量file.name,并且java尝试写入目录logs


您可以强制使用此选项 -D 来调用变量${file.name}的值:

mvn clean test -Dfile.name=logfile.log

答案 9 :(得分:-3)

尝试使用sudo(超级用户)执行命令,这对我有用:) 运行:$ sudo your_command
之后输入超级用户密码。多数民众赞成..