我在项目的源文件夹中添加了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)
请告诉我,如何解决此异常,因为我已尝试将我的属性文件放在根文件夹中,现在我已放入源文件夹但在这两种情况下我都得到了上述异常。
答案 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)
答案 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
之后输入超级用户密码。多数民众赞成..