错误:使用log4j的时候“setFile(NULL,FALSE)调用失败”(Error: “set

2019-06-24 15:13发布

我已经加入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)

请让我知道,如何解决这个例外,因为我试图把我的财产在根文件夹中,现在我已经把源文件夹,但在这两种情况下,我得到了上面的异常。

Answer 1:

我怀疑是变量${file.name}没有正确取代。 其结果是,的值log4j.appender.FILE.File变为logs/ 。 因此,Java的尝试创建一个名为日志文件logs/ ,但很可能是一个现有目录,那么你得到的异常。

作为一个快速补救措施,改变log4j.appender.FILE.File设置为指向的绝对路径文件,例如/tmp/mytest.log 。 你不应该得到一个异常。

之后,你可以继续调试为什么${file.name}未在运行时环境中正常更换。



Answer 2:

我有同样的问题。 这里是为我工作的解决方案:只需把你的财产在cmd行这样的文件路径:

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

希望对你有帮助



Answer 3:

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

- >您的应用程序不能写“日志”文件夹中。 不相关的log4j配置如此。 创建文件夹,如果它不存在,并给它足够的权限为web应用程序写进去了。



Answer 4:

这个错误是因为你提供的appender文件位置的到来是无法到达与当前用户访问。

快速解决方案 ,改变log4j.appender.FILE.File设置为指向使用绝对路径,其位置是可达你登录当前用户,例如/tmp/myapp.log到文件。 现在,你不应该得到一个错误。



Answer 5:

我只是添加写权限“登录”文件夹,它为我工作



Answer 6:

如果是window7的(像我),没有管理权限在C不能写入文件:驱动器

只给在log4j.properties文件的另一个文件夹

设置文件名

log4j.appender.FILE.File = C:\服务器\ log.out你可以用记事本看++



Answer 7:

看一看错误 - “的log4j:ERROR setFile(NULL,FALSE)调用失败。 java.io.FileNotFoundException:原木(访问被拒绝)”

这似乎有命名为“日志”,其访问被拒绝,即是不是有足够的权限来写日志,它的日志文件。 通过给写权限“日志”的日志文件试试。 希望能帮助到你。



Answer 8:

请改变你的日志文件的位置到另一个驱动器。 它会工作。

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



Answer 9:

为了防止这种isue我改变了log4j.properties所有值与目录$ {} kafka.logs.dir我自己的目录文件。 比如d:/温度/ ...



Answer 10:

这是您的配置:

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

而这个错误发生了:

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

如此看来,该变量file.name没有设置,和Java试图写入该目录logs


你可以迫使你的变量的值${file.name}使用此选项-D调用行家:

mvn clean test -Dfile.name=logfile.log


Answer 11:

尝试使用sudo(超级用户)执行你的命令,这个工作对我来说:)
运行:$ sudo的your_command
比后进入超级用户密码。 就这样..



文章来源: Error: “setFile(null,false) call failed” when using log4j