Error: "setFile(null,false) call failed" when using log4j
Solution 1
I suspect that the variable ${file.name}
is not substituted correctly. As a result, the value of log4j.appender.FILE.File
becomes logs/
. As such, Java tries to create a log file named logs/
, but probably it is an existing directory, so you get the exception.
As a quick remedy, change the log4j.appender.FILE.File
setting to point to file by absolute path, for example /tmp/mytest.log
. You should not get an exception.
After that you can proceed to debugging why ${file.name}
is not replaced correctly in your runtime environment.
Solution 2
I had the exact same problem. Here is the solution that worked for me: simply put your properties file path in the cmd line this way :
-Dlog4j.configuration=<FILE_PATH> (ex: log4j.properties)
Hope this will help you
Solution 3
i just add write permission to "logs" folder and it works for me
Solution 4
this error is coming because of appender file location you have provided is not reachable with current user access.
Quick Solution, change the log4j.appender.FILE.File setting to point to file using absolute path which location is reachable to the current user you have logged in, for example /tmp/myapp.log. Now You should not get an error.
Solution 5
if it is window7(like mine), without administrative rights cannot write a file at C: drive
just give another folder in log4j.properties file
Set the name of the file
log4j.appender.FILE.File=C:\server\log.out you can see with notepad++
Shashank Jain
Updated on February 15, 2020Comments
-
Shashank Jain about 4 years
I have added
log4j.properties
file in source folder of project but I am still getting a log4j:error.Here is my Log4j.properties file:
.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
Here is the Java exception that I am getting:
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)
Please let me know, how to resolve this exception, as I have tried placing my properties file in root folder and now I have placed in source folder but in both cases I got the above exception.
-
Jim Bethancourt almost 10 yearsThis is definitely useful in situations where the application has more than one log file
-
Raja Anbazhagan about 9 yearssometimes you cannot have such previlage on a shared system