Java 包 Log4J2 : MapFilters

标签 java logging log4j log4j2

我有一个关于 MapFilters 的简单问题。好吧,我知道映射是什么:简单的键值对。现在 log4j 允许通过(来自网站的示例)过滤所谓的 map 消息:

  <MapFilter onMatch="ACCEPT" onMismatch="DENY" operator="or">
    <KeyValuePair key="eventId" value="Login"/>
    <KeyValuePair key="eventId" value="Logout"/>
  </MapFilter>

但是我应该在代码中的什么地方定义这些消息呢?我试过:

    MapMessage mm = new MapMessage();
    mm.put("eventId", "Login");
    logger.exit(mm);

但这不是处理此问题的便捷方法,顺便说一句:它不起作用。

你知道关于这个主题的更详细的介绍吗? API 在这里并没有真正帮助我。

谢谢大家!

最佳答案

我在配置 MapFilter 时遇到了上述问题。 ThreadContextMapFilter 以类似的方式工作,但在那种情况下,我们必须填充 ThreadContext 映射,一切正常。 ThreadContextMapFilter 成功的原因是 ThreadContext 映射是基于上下文的,它对同一上下文中的所有日志事件都有效,但是 MapFilter它基于 MapMessage 工作,但它不是基于上下文 (MapMessage) 而是基于事件,因此对于每个日志记录事件,我们都必须将 MapMessage 作为参数传递给 MapFilter 工作。

相关配置及代码:

<configuration status="WARN" name="abcd">
    <properties/>
    <MapFilter onMatch="ACCEPT" onMismatch="DENY">
        <KeyValuePair key="Mic" value="Mic123"/>
    </MapFilter>                 
        ...........
        ........... <<Put other relevant configurations here>>
</configuration>

Java代码:

public static void main(String args[]) {
    MapMessage mapMessage = new MapMessage();

    mapMessage.put("Mic", "Mic123");
    log4j2Tester.logger.debug(mapMessage,new Exception("Okies"));
    log4j2Tester.logger.debug(mapMessage);
}

在上面的代码中,log4j2Tester 是我的独立类的对象,logger 是配置的记录器。

希望这篇文章能解决您的问题。 快乐编码。

关于Java 包 Log4J2 : MapFilters,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12768549/

相关文章:

Python - 从多个模块记录到旋​​转文件而不打印到控制台

java - 每个使用 Log4j 的用户都有不同的日志

java - Maven - 如何为每个 java 包构建 jar

java - 如何在 ResourceChangeListener(eclipse 插件)中添加标记?

mysql - 从脚本运行 mysql -vvv,我没有记录

java - log4j2 将参数传递给自定义附加程序

java - AspectJ:如何获取线程名称?

java - 如何在android中的textview顶部使用红色*符号

java - 如何使用 Axis2 获取请求和响应?

php - 当用户点击链接时插入 click_url、时间戳和用户名