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

Sha*_*ain 30 java logging log4j file

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
Run Code Online (Sandbox Code Playgroud)

这是我得到的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)
Run Code Online (Sandbox Code Playgroud)

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

Sto*_*ica 26

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

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

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


Fir*_*ras 5

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

-Dlog4j.configuration=<FILE_PATH>  (ex: log4j.properties)
Run Code Online (Sandbox Code Playgroud)

希望对你有帮助


pri*_*iti 0

查看错误 - 'log4j:ERROR setFile(null,false) 调用失败。java.io.FileNotFoundException:日志(访问被拒绝)'

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