LOG4J 同一类中的多个记录器

发布于 2024-12-08 10:02:45 字数 194 浏览 0 评论 0原文

我有一个具有 log4j 日志记录的 java 项目。它使用滚动文件附加程序和多个记录器来记录到文件。 我想添加一个 DBappender 并有一个单独的记录器,仅写入此附加器,其他记录器都不会向其发送消息。比如说,我需要一个类有两个记录器,一个写入 fileAppender,一个写入 dbAppender。这可能吗,如果可以的话,它的配置是什么?

谢谢

I have a java project that has a log4j logging. It uses a rolling file appender and multiple loggers to log to a file.
I want to add a DBappender and have a seperate logger that only writes to this appender, with none of the other loggers sending messages to it. I need, say one class to have two loggers, one writing to the fileAppender and one writing to the dbAppender. Is this possible, if so what is the configuration for it?

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

<逆流佳人身旁 2024-12-15 10:02:45

可以在一个类中使用两个 Logger。

第一个想法:获取两个不同名称的记录器:

package com.mycompany.apackage.MyClass;

public class MyClass {
    private static final logger = Logger.getLogger(Myclass.class)
    private static final dbLogger = Logger.
        getLogger(Myclass.class.getName() + ".dblogger")
}

dbLogger包的配置:(

<root> 
    <appender-ref ref="mainlog" /> 
</root> 

<logger name="com.mycompany.apackage.MyClass.dblogger">
    <appender-ref ref="dbappender" />
</logger>

未测试。)
在这种情况下,dbLogger 还会记录到 mainlog 附加程序。如果不合适你可以使用
mainlog(和其他)附加程序中的自定义过滤器,用于过滤 dbLogger 的消息。另一个解决方案是为 dbLogger 使用完全不同的前缀:

    private static final logger = Logger.getLogger(Myclass.class)
    private static final dbLogger = Logger.
        getLogger("dblogger." + Myclass.class.getName())

Log4j 配置:

<root> 
</root> 

<logger name="com.mycompany">
    <appender-ref ref="mainlog" />
</logger>
<logger name="dblogger.com.mycompany">
    <appender-ref ref="dbappender" />
</logger>

请注意,如果将相同的参数传递给 getLogger() 方法,您将获得相同的 Logger 对象,因此您必须使用不同的名称。

It's possible to use two Loggers in one class.

First idea: get the two loggers with different names:

package com.mycompany.apackage.MyClass;

public class MyClass {
    private static final logger = Logger.getLogger(Myclass.class)
    private static final dbLogger = Logger.
        getLogger(Myclass.class.getName() + ".dblogger")
}

Config for the package of the dbLogger:

<root> 
    <appender-ref ref="mainlog" /> 
</root> 

<logger name="com.mycompany.apackage.MyClass.dblogger">
    <appender-ref ref="dbappender" />
</logger>

(Not tested.)
In that case the dbLogger also logs to the mainlog appender. If it's not appropriate you could use
a custom filter in the mainlog (and other) appenders which filters out the messages of the dbLogger. Another solution is using a completely different prefix for the dbLogger:

    private static final logger = Logger.getLogger(Myclass.class)
    private static final dbLogger = Logger.
        getLogger("dblogger." + Myclass.class.getName())

Log4j config:

<root> 
</root> 

<logger name="com.mycompany">
    <appender-ref ref="mainlog" />
</logger>
<logger name="dblogger.com.mycompany">
    <appender-ref ref="dbappender" />
</logger>

Note that if you pass the same parameter to the getLogger() method you will get same Logger object, so you have to use different names.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文