【问题标题】:Implement Custom Logger with slf4j使用 slf4j 实现自定义记录器
【发布时间】:2011-02-08 21:04:28
【问题描述】:

我想实现一个自定义记录器,它将所有日志条目记录到数据库中。 目前我的应用以这种方式记录(slf4j 和 log4j 绑定):

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

我不确定如何继续。 我的想法是实现自定义日志绑定 通过实现org.slf4j.Logger Interface

接下来的步骤是什么? 我的目标是不更改当前代码

我考虑过的链接:

【问题讨论】:

标签: java slf4j


【解决方案1】:

这应该相当容易。您需要实现自己的LoggerLoggerFactory。您根本不必更改现有代码。

完成此操作后,您需要实现 StaticLoggerBinder 以返回您的记录器工厂和类名。如果您下载 slf4j zip 文件,那么您也可以获得所有实现的源代码,只需查看 slf4j-log4j 中的 StaticLoggerBinder 即可。

查看此链接了解详情:http://www.slf4j.org/faq.html#slf4j_compatible

【讨论】:

  • 谢谢大江户!是否也可以在我的日志框架中使用 log4j,例如只向数据库写入错误和警告,其余部分使用 log4j?问题是我有 2 个绑定而不是 slf4j.org/codes.html#multiple_bindings
  • 目前看来我正在寻找一个自定义 log4j 附加程序,因此警告错误和警告级别转到我的自定义附加程序,而其余部分保持不变(在 log4j.xml 中配置)
  • 当然,我想您可以编写自定义记录器,以便将相关请求转发到 log4j。再次,查看 slf4j-log4j 的源代码以帮助您入门 :)
【解决方案2】:

您不必编写自己的日志记录实现,将日志记录框架切换到logback 怎么样? Loback 支持本地记录到数据库。当您两次使用 SLF4J API 时,您的代码不会改变。

看看ch.qos.logback.classic.db.DBAppender。如果默认的表格布局不符合您的需求,您可以实现ch.qos.logback.classic.db.names.DBNameResolver 来自定义表格和列名。

【讨论】:

    猜你喜欢
    • 2016-11-04
    • 2015-11-13
    • 1970-01-01
    • 2021-10-27
    • 2023-04-01
    • 2012-10-08
    • 1970-01-01
    • 2019-12-08
    • 1970-01-01
    相关资源
    最近更新 更多