Log4j公共类项目

时间:2014-06-11 12:48:09

标签: java logging log4j

我需要log4j和我的应用程序的一些帮助。我在JAR上有3个包,如下所示。

A类和B类有一个主类,所以我可以同时启动两个不同的应用程序实例,一个来自A类,另一个来自B类。

我想要的是从A类运行的应用程序必须登录到appender1 我从B类运行的应用程序必须登录到appender2

问题是来自C类的日志是在A类appender和B类appender中编写的:当我运行A类时我有

appender1:

开始A. 做点什么 结束A

appender 2:

做某事

在将A类运行到appender1时,我不想写入appender2。 与B类相同我不想只在appender2中写入appender1

感谢您的建议。

这是我的类和log4j的模式:

我的JAR:

  • com.myAppl.package1.A
  • com.myAppl.package2.B
  • com.myAppl.package3.C

-

Class A {
    LOG = LogFactory.getLog(A.class);

    main() {
        LOG.info("Start A");
        new C().doSomething();
        LOG.info("End A");
    }

}

Class B {
    LOG = LogFactory.getLog(B.class);

    main() {
        LOG.info("Start B");
        new C().doSomethingElse();
        LOG.info("End B");
    }

}

Class C {
    LOG = LogFactory.getLog(C.class);

    doSomething() {*
        LOG.info("Doing something");
    }

    doSomethingElse() {
        LOG.info("Doing something else");
    }

}

的log4j.xml

...

<logger name="com.myAppl.package1" additivity="false">
    <level value="info" />
    <appender-ref ref="appender1"/>
</logger>

<logger name="com.myAppl.package2" additivity="false">
    <level value="info" />
    <appender-ref ref="appender2"/>
</logger>

<logger name="com.myAppl.package3" additivity="false">
    <level value="info" />
    <appender-ref ref="appender1"/>
    <appender-ref ref="appender2"/>
</logger>

...

1 个答案:

答案 0 :(得分:0)

您没有指定您正在使用的log4j版本。使用版本2,您可以将过滤器附加到appender。 http://logging.apache.org/log4j/2.x/manual/filters.html

我希望您可以设置一些ThreadContext或其他内容并过滤