Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

log4j2 logging happening in the wrong path

I have an ear deployed in weblogic with the log4j2.xml logPath set as

<Property name="logPath">some_path_1<Property>

and a logger defined as

<Logger name="a.b.c.d" level="INFO" />

Inside this ear/lib there is a jar containing a log4j2.xml and the logPath property is defined as

<Property name="logPath">some_path_2<Property>

and a logger with a very similar packaging structure

<Logger name="a.b.c" level="INFO" />

Both log4j2.xml's are configured to have a different log file name as well. But the logs for both are coming in the path some_path_2 and with the file name defined in that jar

How to ensure both logging outputs happens separately as defined?

My ear structure is like

ear
|--lib
|--|--abc.jar
|--|--|--log4j2.xml //the one thats getting loaded
|--xyz.war
|--|--WEB-INF
|--|--|--classes
|--|--|--|--log4j2.xml // the one I want

Edit1: I added the following in the containing war's web.xml but it did not help

    <context-param>
        <param-name>log4jConfigLocation</param-name>
        <param-value>/WEB-INF/classes/log4j2.xml</param-value>
    </context-param>

Edit2: I also tried this and found that this is working intermittently

ear
|--lib
|--|--abc.jar
|--|--|--log4j2.xml //the one thats getting loaded
|--|--xyz.jar
|--|--|--log4j2.xml //the one I want.. works but not always.Does classloader loads the jars alphabetically?
|--xyz.war
|--|--WEB-INF
|--|--|--classes
|--|--|--|--log4j2.xml // the one I want
like image 957
rajesh Avatar asked Jul 19 '17 09:07

rajesh


2 Answers

Log4j is initialized only once by using the configuration file which is first found by the log4j bootstrapper. All other (possible present) configuration files will not be taken into account. Learn more on the precedences of log4j auto configuration in the appropriate tutorials.

like image 193
Heri Avatar answered Sep 28 '22 07:09

Heri


As you probally already know your problem is that only one configuration-file gets loaded and which one depends on the classloader. So you should not rely on that.

There are only two possible soulutions for your problem, but today I do not have the time to work it out for you - sorry. You have to remove or rename the config-file in abc.jar

  1. Remove log4j2.xml from abc.jar Do it with your build-script in ANT/MAVEN/GRADLE or whatever. Copy-paste the interessting parts of the config-file in your config-file.

  2. Rename log4j2.xml inside abc.jar Do it with your build-script in ANT/MAVEN/GRADLE or whatever. Now you could include the whole config-file in your log4j2.xml. This is called CompositeConfiguration.

I hope this little advice will help you. Good luck!

like image 22
Tobias Otto Avatar answered Sep 28 '22 07:09

Tobias Otto