Error: "setFile(null,false) call failed" when using log4j

file, java, log4j, logging

Solution

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.

Problem

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.

Original source