【问题标题】:Distributed logging with JMS and logback使用 JMS 和 logback 进行分布式日志记录
【发布时间】:2011-03-11 12:32:14
【问题描述】:

我正在做一个项目,将多台机器的日志数据合并到一个数据库中。

我必须记录场景:

  1. 通常记录异常和开发人员记录,例如开发人员将关卡转为调试。
  2. “审核”日志记录。特殊情况需要记录在单独的数据库中,单独的结构。

我正在使用 logback 和 JMS。 “客户端”记录到 JMS 队列,“服务器”读取表单队列并写入数据库。

我正在寻找一种简单的方法来区分这两种类型的日志。 我想做的是创建另一个日志级别,例如“审计”,然后我可以在“服务器”端检查并创建我们的特殊对象结构并写入我们单独的数据库。

但是这在 logback 中是不可能的。我已经考虑过标记,但这意味着开发人员必须明确应用标记。我的另一个选择是拥有两个单独的记录器,让开发人员获取正确的记录器。这不像我想的那么优雅。

我希望开发人员只为调试执行 log.debug,为错误执行 log.error,为审计执行 log.audit。

任何建议,任何人都必须解决类似的问题?

【问题讨论】:

    标签: java logging jms logback


    【解决方案1】:

    首先,为什么不直接使用DBAppender直接登录数据库,跳过JMS层呢?如果您关心性能,Logback 会向log asynchronously 提供便利。

    至于过滤,单独的记录器是最简单和最干净的方法(然后只需按记录器/类别进行过滤)。这种方法强调这些是特殊的日志,而不是普通的应用程序调试。我什至会考虑将此审计日志包装在某些服务/方面以将其与业务逻辑分开。

    如果您真的想重用现有的记录器,您可以使用 Logback filters 在运行时调度和过滤事件。

    【讨论】:

    • 如果数据库不可用,会发生什么? JMS 基础架构也可能不可用,但是我实际上从未经历过计划外的 JMS 中断(在我的情况下是 TIBCO EMS),但我看到了很多计划外的数据库中断。
    • Thomasz,你能提供一个关于 Logback 如何支持异步日志记录的链接吗?我在他们的文档或 JavaDoc 中找不到对它的任何引用。谢谢。
    • 天啊!还没有完成:LBCORE-92, LBCLASSIC-177... 编辑我的答案
    • Tomasz 指出,使用 JMS 而非 JDBC 的原因有很多。我正在开发一个数据库密集型应用程序并使用 JMS 来分配和减轻 EJB 上的负载。我有兴趣讨论原始问题:)
    • 更新:AsyncAppender 终于发布了。顺便说一句,为什么投反对票?
    猜你喜欢
    • 2014-10-25
    • 2017-05-06
    • 1970-01-01
    • 2016-01-14
    • 2011-12-26
    • 1970-01-01
    • 1970-01-01
    • 2021-06-26
    • 2017-10-25
    相关资源
    最近更新 更多