Log4j Properties in a Custom Place

24,869

Solution 1

I think the easiest thing to do is specify the location of the file using the log4j.configuration system property. Adopting the example in the Log4J manual:

java -Dlog4j.configuration=conf/log4j.properties -classpath ...

I believe that Log4J will find a file named "log4j.properties" anywhere on the classpath, but may be hallucinating. Worth trying, however.

Solution 2

As you state, by invoking PropertiesConfigurator, you are tying your application to log4j. However, the extend of this tie is quite limited. You could very easily remove the line invoking PropertiesConfigurator and recompile your code. After that is done, assuming you are using the SLF4J API for logging, you could repalce log4j with another logging framework, say logback-classic or j.u.l. just by replacing jar files. Thus, SLF4J still serves its purpose to a large extend. I would not throw the baby out with the bath water.

Solution 3

You can specify config file location with VM argument

-Dlog4j.configuration="file:/C:/workspace3/local/log4j.properties"

Share:
24,869
Azder
Author by

Azder

I code for living

Updated on December 13, 2020

Comments

  • Azder
    Azder over 3 years

    I'm using Apache Commons Logging and SLF4J with log4j, but I also want to use the log4j.properties in a custom place like conf/log4.properties. Here is the problem:

    If i use

      PropertyConfigurator.configure("conf/log4j.properties");
    

    then my app is tied to log4j and defeats the purpose of having ACL and SLF4J.

    What is the best way to configure it without the app ever knowing what the logging implementation is?

  • Haes
    Haes over 14 years
    Actually, I had the same problem as the OP, but your solution didn't work for me. I had to specify the location of the log4j.properties file in a URL style form (-Dlog4j.configuration=file:///my/conf/log4j.properties).
  • CodeClimber
    CodeClimber over 11 years
    Upvotes all round. Worked for me with only one forward slash after file: -Dlog4j.configuration=file:/C:/JBoss51/jboss-eap-5.1/..../lo‌​g4j.properties on JBOSS 5.1 EAP on a Windows 7 machine.
  • MKod
    MKod almost 8 years
    @kdgregory...where do we specify the location of file, is it in VM arguments in RUN configuration in eclipse project OR is it a configuration file in tomcat ?
  • Frankie Drake
    Frankie Drake almost 7 years
    @Haes This is solution for me too, should be also the accepted answer. Thanks :)
  • leeman24
    leeman24 over 6 years
    This didn't work for me on Linux. I had to add file: (E.g., java -Dlog4j.configuration=file:/path/to/log4j.properties -classpath ...)