log4j and weblogic: duplicate log messages

元气小坏坏 提交于 2019-12-05 08:24:57
Shawn

Make the logger static

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

The key here is to create a Logger for each class, and not for each instance.

try setting additivity false programmatically or in config.

    Logger.getLogger(MyClass.class).setAdditivity(false);

To me, that did the trick when I set it in log4j.xml

<logger name="com.stackoverflow.answers.gnat" additivity="false">
    <!-- note additivity value set above -->
    <level value="INFO"/>
    <appender-ref ref="knowledge"/>
    <appender-ref ref="reputation"/>
</logger>

If you make your Logger class static as suggested above, and then ensure that you're configuring log4j either via a -D system property at the JVM level or in the configuration of your application, you shouldn't have any issues. That call to parse configuration either at class load time or at instance creation time is unnecessary overhead.

log4j should only need to initialise configuration once - whether that's at the initialisation of the server, or at deployment of your application.

Is your project a web application?

Also, you can find out more about hooking into WebLogic Server's logging configuration here: http://download.oracle.com/docs/cd/E12840_01/wls/docs103/logging/logging_services.html

Hope that helps.

Anonymous

The issue lies in the BasicConfurator.configure() method. I had the exact same issue in my java project, and I'm not using WebLogic.

I moved my BasicConfigurator.configure() method from my beforeTest() to beforeClass(), and suddenly the issue went away.

@BeforeClass
public static void beforeClass() {
  BasicConfigurator.configure();
  GeoLogger.setLogLevel(Level.INFO);
}

@Before
public void beforeTest() {
  //BasicConfigurator.configure();
}

Hope that helps direct you to a solution.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!