Where should I put the log4j.properties file?

Viewed 345129

I wrote a web service project using netbeans 6.7.1 with glassfish v2.1, put log4j.properties to the root dir of project and use:

static Logger logger = Logger.getLogger(MyClass.class);

in Constructor:

PropertyConfigurator.configure("log4j.properties");

and in functions:

logger.info("...");
logger.error("...");
// ...

but, it is error info(actually, I have tried to put it almost every dir that I could realize):

log4j:ERROR Could not read configuration file [log4j.properties].
java.io.FileNotFoundException: log4j.properties (The system cannot find the file specified)
        at java.io.FileInputStream.open(Native Method)
        at java.io.FileInputStream.<init>(FileInputStream.java:106)
        at java.io.FileInputStream.<init>(FileInputStream.java:66)
        at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:297)
        at org.apache.log4j.PropertyConfigurator.configure(PropertyConfigurator.java:315)
        at com.corp.ors.demo.OrsDemo.main(OrisDemo.java:228)
log4j:ERROR Ignoring configuration file [log4j.properties].
log4j:WARN No appenders could be found for logger (com.corp.ors.demo.OrsDemo).
log4j:WARN Please initialize the log4j system properly.

the example project could be get from http://www.91files.com/?N3F0QGQPWMDGPBRN0QA8

20 Answers

You can specify config file location with VM argument -Dlog4j.configuration="file:/C:/workspace3/local/log4j.properties"

Try:

PropertyConfigurator.configure(getClass().getResource("/controlador/log4j.properties"));

A few technically correct specific answers already provided but in general, it can be anywhere on the runtime classpath, i.e. wherever classes are sought by the JVM.

This could be the /src dir in Eclipse or the WEB-INF/classes directory in your deployed app, but it's best to be aware of the classpath concept and why the file is placed in it, don't just treat WEB-INF/classes as a "magic" directory.

Put log4j.properties in classpath. Here is the 2 cases that will help you to identify the proper location- 1. For web application the classpath is /WEB-INF/classes.

\WEB-INF      
    classes\
        log4j.properties
  1. To test from main / unit test the classpath is source directory

    \Project\
       src\
          log4j.properties
    

There are many ways to do it:

Way1: If you are trying in maven project without Using PropertyConfigurator

First: check for resources directory at scr/main

  if available,
       then: create a .properties file and add all configuration details.
  else
       then: create a directory named resources and a file with .properties     
write your configuration code/details.

follows the screenshot:

![enter image description here

Way2: If you are trying with Properties file for java/maven project Use PropertyConfigurator

Place properties file anywhere in project and give the correct path. say: src/javaLog4jProperties/log4j.properties

static{

 PropertyConfigurator.configure("src/javaLog4jProperties/log4j.properties");

}

enter image description here

Way3: If you are trying with xml on java/maven project Use DOMConfigurator

Place properties file anywhere in project and give correct path. say: src/javaLog4jProperties/log4j.xml

static{

 DOMConfigurator.configure("src/javaLog4jProperties/log4j.xml");

}

enter image description here

For me, it worked when I put the file inside the resources folder. Also, it was a war file for my project. My recommendation is to ensure that the name of the file is log4j.properties, as my project didn't recognize "log4j2.properties"

log4j.properties in src/main/resources

Actually, I've just experienced this problem in a stardard Java project structure as follows:

\myproject
    \src
    \libs
    \res\log4j.properties

In Eclipse I need to add the res folder to build path, however, in Intellij, I need to mark the res folder as resouces as the linked screenshot shows: right click on the res folder and mark as resources.

You don't need to specify PropertyConfigurator.configure("log4j.properties"); in your Log4J class, If you have already defined the log4j.properties in your project structure.

In case of Web Dynamic Project: -

You need to save your log4j.properties under WebContent -> WEB-INF -> log4j.properties

I hope this may help you.

Open spark-shell

Then type System.getenv("SPARK_CONF_DIR")

That will print where your log4j.properties should go.

Related