当前位置: 首页 > 知识库问答 >
问题:

Log4j2日志记录空线程上下文

李利
2023-03-14

我有以下控制台附加器;

<Console name="STDOUT">
     <PatternLayout pattern="%highlight{%d [%t] %notEmpty{[%marker] }%-5level: %msg %X%n%throwable}"/>
     <ThresholdFilter level="trace"/>
</Console>

问题是我在这里使用的模式输出了一个空的ThreadContext({})。我不想使用特定的密钥名称(例如,%X{username}),因为系统非常广泛,密钥集也不同。示例输出:

2017-09-26 10:39:55396[main]信息:启动内部HTTP客户端{}

共有2个答案

农飞翔
2023-03-14

好的,我解决了我的问题通过使用ScriptPattern Selector。下面的脚本检查log事件的MDC是否为空,如果为true则更改模式

<Console name="STDOUT">
      <PatternLayout>
         <ScriptPatternSelector defaultPattern="%highlight{%d [%t] %notEmpty{[%marker] }%-5level: %msg%n%throwable}">
               <Script name="MDCSelector" language="javascript"><![CDATA[
                    result = null;
                    if (!logEvent.getContextData().size() == 0) {
                        result = "WithMDC";
                    } else {
                        result = null;
                    }
                    result;
               ]]>
               </Script>
           <PatternMatch key="WithMDC" pattern="%highlight{%d [%t] %notEmpty{[%marker] }%-5level: %msg %X%n%throwable}"/>
         </ScriptPatternSelector>
     </PatternLayout>
    <ThresholdFilter level="trace"/>
</Console>
蒙麒
2023-03-14

使用ScriptPattern Selector会要求log4j将“{}”替换为MDC的空字符串。为此,请在log4j.xml或log4j2.xml.中将"%X"替换为"%等于{%X}{{}}{}"

 类似资料:
  • 我试图从log4j1更改为log4j2。我所做的: 已删除旧配置文件log4j。xml 创建了新的配置文件log4j2。xml 创建了jboss部署结构。xml 编辑的pom 环境:野蝇10 1 EAR 4 WAR文件中没有使用web.xml。以前的log4j配置日志在EAR中(仅) Log4j2配置文件 Jboss部署结构 新的maven依赖关系 我之前说过我在SLF4j中使用log4j1。这些

  • 互联网上有许多帖子建议如何从logback迁移到log4j2进行Spring引导日志记录。 参考这个sof post-Spring Boot日志与log4j2-我已经配置我的项目使用log4j2。然后我添加了一些基本的log4j2.xml和log4j2.properties文件来测试。 但是在这些更改之后,我的项目无法进行任何日志记录。有人能帮我找出毛病吗? 项目代码可在github-https:

  • 我目前正在研究事件/activity日志记录系统,我正在使用方法拦截器将其作为一个方面来实现。目前,系统/框架假定每个方法都是一个activity,但我想对此进行扩展,以便一个activity可以跨越多个方法调用。为了做到这一点,首先想到的方法是为所有相关的方法调用提供一些上下文。但是,我只知道在所有方法调用都在单个线程的上下文中(像Log4j的MDC/NDC)时这样做的方法。是否有任何方法为多线

  • 假设我们构建了一个JavaSDK,不同的项目可以通过将其添加为类路径中的jar或添加为mavenpom.xml或gradle文件中的依赖项来使用它。当其他项目使用该库时,SDK中的日志在运行时不可见。我尝试使用SL4J,当其他项目使用它时,没有一个日志在运行时可见。我应该用log4j2吗?如果是,我应该在我的SDK中提供log4j配置 /properties文件吗?是否会在运行时从消费者库中提取属

  • 我刚刚在我的应用程序中实现了日志记录,我想知道是否有一种方法来检查日志记录程序是否为空。 我想到的是在我的脚本中设置两个处理程序: 一个用于带有级别的控制台 一个用于级别为的文件 在脚本的末尾,我需要检查logger是否不为空。这意味着在运行期间,记录了一些的消息,在这种情况下,我希望通过将调试级别的日志文件发送到我的邮箱。 这种检查在脚本本身中是否可能,而不需要shell重定向到文件?

  • 虽然很清楚如何配置多线程jBehave run,但我不清楚如何处理日志记录混乱。 这里有哪些选项?