使用 slf4j 绑定自定义 log4j2 包装器

Posted

技术标签:

【中文标题】使用 slf4j 绑定自定义 log4j2 包装器【英文标题】:Binding custom log4j2 wrapper with slf4j 【发布时间】:2019-12-08 00:25:20 【问题描述】:

我正在 log4j2 上编写自定义包装器。使用https://logging.apache.org/log4j/2.x/manual/customloglevels.html#CustomLoggers

要求是根据记录的对象类型选择附加程序。我正在考虑的方法是扩展 log4j2 记录器并覆盖日志方法(如 info),在这些方法中,检查对象类型并调用所需的 appender。

现在我希望我的应用程序直接使用 slf4j 外观而不是 log4j2。需要有关如何将我的自定义 log4j2 包装器绑定到 slf4j 的帮助,更轻松:)

我正在考虑的一个选项(尚未尝试过)是在 log4j-slf4j-impl 中引用我的 customlogger 包装器并生成 jar 并在应用程序中使用它, https://github.com/apache/logging-log4j2/blob/f838bd6f42ea104e692e9e2227dcc54283a41901/log4j-slf4j18-impl/src/main/java/org/apache/logging/slf4j/Log4jLogger.java

我们有更好的方法来解决这个问题吗?

【问题讨论】:

这可能会有所帮助,我已经使用 Ninja Framework 构建了一些应用程序,并且我知道他们使用 sl4j 作为他们的日志记录解决方案。您可以查看他们的日志记录源以了解他们如何实现它。 ninjaframework.org/documentation/logging.html 【参考方案1】:

如果您想根据对象类型选择 Appender,一种方法是使用 Log4j 2 的 RoutingAppender。 RoutingAppender 可以使用模式或脚本进行配置。该模式用于从日志事件中提取某些内容。然后将该值与配置的选项进行匹配,从中选择“路由”到 Appender。使用脚本时,脚本会返回要使用的“路线”的名称。

【讨论】:

以上是关于使用 slf4j 绑定自定义 log4j2 包装器的主要内容,如果未能解决你的问题,请参考以下文章

用自定义 VBA 类包装 .Net ArrayList 获取迭代器

日志相关知识梳理

如果我们将它与slf4j api一起使用,我们可以使用log4j2的所有功能吗?

Spring 3 和 FreeMarker 的自定义对象包装器

使用 @AuthenticationPrincipal 注入自定义 OidcUser 包装器

如何在包装器 Swift View 中使用自定义 UIView 的扩展功能?