【问题标题】:A good database log appender for Java?一个好的 Java 数据库日志附加器?
【发布时间】:2011-05-08 15:37:10
【问题描述】:

在我的工作场所,我们编写了一个自定义 log4j appender,它将日志消息写入数据库(异步使用专用线程,因此不会影响性能)。 我更喜欢它而不是写入日志文件——基于数据库的日志更容易查询和分析。

是否有这样做的开源解决方案(专门针对 log4j 或任何其他 java 记录器)?

我们的 appender 有一些东西,我想在替代方案中看到:

  • 记录异常(呵呵!)
  • 数据库写入来自单独的线程/池

我们的 appender 支持以下列,我希望在我们找到的任何解决方案中都能看到它们。

  • Lo​​gId
  • 时间
  • 留言
  • 堆栈跟踪
  • 进程 ID
  • 线程 ID
  • 机器名称
  • 组件
  • 级别(调试/信息/警告/...)
  • 线程名称

【问题讨论】:

    标签: java logging log4j


    【解决方案1】:

    log4j 还提供了一个 DBAppender 类(log4j 需要一组特定的表来使用这个 appender 进行日志记录)。 http://logging.apache.org/log4j/companions/receivers/apidocs/org/apache/log4j/db/DBAppender.html

    这里有一个更新的非 Apache jdbc 记录器,您可能还想尝试一下: http://www.dankomannhaupt.de/projects/index.html

    【讨论】:

    【解决方案2】:

    只是好奇,它不会严重影响托管此类附加程序的应用程序的性能吗?即使异步进行,直接登录到关系数据库也是相当昂贵的。

    【讨论】:

    • 好吧,如果你打开 DEBUG 消息,它可能会影响性能。尽管如此,我们还是分批进行,因此对性能的影响并不大,除非您真的每秒输出数百条日志消息。
    • 是的,我是这么认为的。但是请注意,堆栈跟踪可能很大。如果您的应用程序专门用于日志管理 - 直接提交到数据库是可以的,但如果它应该做真正的工作,那么数据库层的麻烦似乎不是一种可扩展的方法恕我直言。我认为没有像您要求的那样的开源附加程序,没有见过。曾经有一个叫JDBCAppender的东西,但是看起来并不严重。如果你想研究一个商业产品——看看 logfaces,它确实做到了这一点,但范围更广,并将应用程序与日志管理完全分离。
    • 过去三年我们在生产代码中使用了这种方法,在一个中等规模的系统(大约 20 台机器)中。假设您的数据层“足够可扩展”并且您不会发送太多日志消息(通常为 INFO 及以上),我发现优势大于劣势。
    【解决方案3】:

    LOG4J 不需要自定义附加程序来写入数据库。您可以使用与 Apache 的发行版捆绑在一起的 JDBCAppender

    根据 APACHE 的文档,该 API 将来可能会被替换。但是现在,我们使用它并且效果很好。

    【讨论】:

    • 它在文档中用红色表示它不记录异常!
    • @ripper234:我知道。您没有指定您需要记录异常... :-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-02
    • 1970-01-01
    • 1970-01-01
    • 2015-10-17
    • 2012-01-06
    • 1970-01-01
    相关资源
    最近更新 更多