37

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

这是我的 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)

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

4

10 回答 10

27

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

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

之后,您可以继续调试为什么${file.name}在您的运行时环境中没有正确替换。

于 2013-05-27T20:21:26.787 回答
5

我有同样的问题。这是对我有用的解决方案:只需以这种方式将您的属性文件路径放在 cmd 行中:

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

希望对你有帮助

于 2013-05-27T09:04:49.797 回答
2

由于当前用户访问无法访问您提供的附加程序文件位置,因此出现此错误。

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

于 2015-09-10T11:54:03.627 回答
2

我只是将写权限添加到“日志”文件夹,它对我有用

添加写权限

于 2015-10-04T17:38:51.363 回答
1

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

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

设置文件名

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

于 2014-03-28T20:30:22.810 回答
1

这是你的配置:

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

并且发生了这个错误:

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

所以看起来变量file.name没有设置,java尝试写入目录logs


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

mvn clean test -Dfile.name=logfile.log
于 2019-02-14T13:35:41.760 回答
0

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

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

于 2013-05-07T07:21:38.547 回答
0

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

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

于 2014-01-21T21:49:48.357 回答
0

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

于 2018-07-23T19:56:21.687 回答
-4

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

于 2015-03-23T05:13:29.503 回答