gpt4 book ai didi

java - 有没有办法使用Log4j2中的RoutingAppender基于Marker路由日志

转载 作者:行者123 更新时间:2023-12-01 19:08:29 26 4
gpt4 key购买 nike

可以filter使用标记的消息,例如:

      <MarkerFilter marker="FLOW" onMatch="ACCEPT" onMismatch="DENY"/>

但是我正在尝试使用 RoutingAppender 根据标记路由消息。我不想在多个 Appender 中多次过滤相同的参数。这是我的配置示例(yaml):

Routing:
name: ROUTING_APPENDER
Routes:
pattern: "$${ctx:marker}" #<-- How to use Marker here?
Route:
- key: MyRoutingKey
ref: MyCustomAppender

文档规定:

The pattern is evaluated against all the registered Lookups and the result is used to select a Route

不过好像没有Lookup对于标记,对于 LogLevel 也是如此。可以在 ThreadContextMap 中添加自定义 MarkerValueLogLevelValue但我发现该解决方案并不真正有效,它会重复已知信息。

这是没有记录还是根本不可能?是否应该有一种内置方法来访问 Lookup 中的这些值?

最佳答案

RoutingAppender 的文档显示了 ThreadContext 查找,但路由也可以与其他查找一起使用。一种想法是创建自定义查找。

自定义查找是作为 log4j2 插件实现的。为了帮助 log4j2 找到您的插件,您可以在配置文件中启用 packages="yourCustomPackage"。您的插件类需要位于类路径中,以便 log4j 可以找到它。这是自定义查找的插件代码:

import org.apache.logging.log4j.Marker;
import org.apache.logging.log4j.core.LogEvent;
import org.apache.logging.log4j.core.config.plugins.Plugin;
import org.apache.logging.log4j.core.lookup.StrLookup;

@Plugin(name = "marker", category = "Lookup")
public class MarkerLookup implements StrLookup {

public String lookup(String key) {
return null
}

public String lookup(LogEvent event, String key) {
final Marker marker = event.getMarker();
return marker == null ? null : marker.getName();
}
}

并在配置文件中:

Routing:
name: ROUTING_APPENDER
Routes:
pattern: "$${marker:}"
Route:
- key: PERFORMANCE
ref: PERFORMANCE_APPENDER
- key: PAYLOAD
ref: PAYLOAD_APPENDER
- key: FATAL
ref: FATAL_APPENDER
- ref: APPLICATION_APPENDER #Default route

感谢 Log4j2 开发人员 ( https://issues.apache.org/jira/browse/LOG4J2-1015 )。

更新:根据他们的说法,它应该内置在下一个版本(2.4)中。因此之后无需编写自定义插件。

关于java - 有没有办法使用Log4j2中的RoutingAppender基于Marker路由日志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59505494/

26 4 0
文章推荐: ios - 单元测试 IBOutlet 的属性
文章推荐: java - 我的 TextView 不支持这个 (') 字符
文章推荐: java - 将 Collection 转换为 Collection