【问题标题】:log4j Custom Category Implementationlog4j 自定义类别实现
【发布时间】:2015-05-18 19:04:57
【问题描述】:

为 log4j 实现自定义类别类的最简单方法是什么?这是我想要实现的目标:

  1. 使用 log4j 使用自定义构建的通知应用程序发送通知。

  2. 使用 vanilla log4j 库,无需 fork 和构建自定义 jar。

我想通过添加 2 个如下参数来重载 info()warn()error()fatal() 方法:error(Object message, Throwable t, String alertLevel, String alertGroup)

我想这样做是因为我想在一次通话中记录和提醒同一条消息,同时仍然具有在不同级别记录和提醒的灵活性。

我进行了很多搜索,并查看了 apache log4j 配置教程,结果空手而归。我也意识到可能有更好的方法来解决这个问题。谁能给我指路吗?

【问题讨论】:

  • 自定义应用程序应该如何接收通知?是否只在同一台机器上?
  • 我应该更清楚。通知被发送给人类用户。通知通过 RESTful Web 服务调用发送到自定义构建的警报服务。

标签: java logging log4j


【解决方案1】:

这不是您要的,但您可能想查看Mapped Diagnostic Context

一些信息可以在http://www.slf4j.org/manual.html#mdcz上找到

【讨论】:

  • 是的,我研究过 NDC 和 MDC。但他们不会解决我尝试拨打 1 个电话以同时记录和发送警报通知的问题。我对最小化非域代码有点强迫症。
  • 您可以构建一个实用程序类,将两个操作捆绑为一个:class LogWithAlerts { public static error(Logger logger, Object message, Throwable t, String alertLevel, string alertGroup) { logger.error(...); alerter.alert(message, t, level, group); } }。或者,您可以更改“自定义构建的通知应用程序”以使用 MDC 了解何时发送警报。另一个探索的途径是看看 Log4j 如何发送电子邮件(SMTPAppender 和logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/…
  • 我喜欢这个解决方案。我打算 fork log4j 并添加自定义功能。但我不能完全让自己去做,因为它有点违反关注点分离。具体来说,我意识到如果使用像 logger.isInfoEnabled() 这样的日志保护并且有人将日志级别更改为错误,则不会发送通知。我认为实用程序类是一个更好的主意。谢谢!
  • 祝你好运。查看有效的 Java 书籍关于转发类的章节
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-12-06
  • 2021-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-04
相关资源
最近更新 更多