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

124,233

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

add write permission

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++

Share:
124,233
Shashank Jain
Author by

Shashank Jain

Updated on February 15, 2020

Comments

  • Shashank Jain
    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
    Jim Bethancourt almost 10 years
    This is definitely useful in situations where the application has more than one log file
  • Raja Anbazhagan
    Raja Anbazhagan about 9 years
    sometimes you cannot have such previlage on a shared system