当前位置: 首页 > 面试题库 >

Log4j2的RoutingAppender的通配符模式

巢安澜
2023-03-14
问题内容

我正在尝试使用Log4j2的新RoutingAppender路由基于MDC(Log4j2中的ThreadContext)的不同日志。我想做的是以下几点:

  • 如果MDC映射具有$ contextId->追加到$ contextId附加器(特定日志)
  • 如果MDC没有$ contextId->追加到主附加程序(常规日志)

我想使用标记中的通配符模式来实现此目的,然后使用for contextId($
{ctx:contextId})中的键参数和主附加器使用默认值(不带键​​参数)进行过滤,但是我没有知道那个通配符是哪个值。

感谢您提供任何帮助,也许我是从错误的途径来解决这个问题。我一直在阅读有关过滤器的信息,但似乎无法按我的意愿工作。

谢谢!


问题答案:

感谢链接Remko,我找到了一个临时解决方案,直到Log4j2的人员对该功能进行了改进。该解决方案同时使用RoutingAppender和Filters。这是我的log4j2配置的样子(我定义了属性,但未在此处显示):

<appenders>
    <appender name="applicationAppender" type="RollingFile" fileName="${logFileName}" filePattern="${logFileNamePattern}" bufferedIO="true" immediateFlush="true" append="true">
        <layout type="PatternLayout" pattern="${logPattern}" />
        <Policies>
            <TimeBasedTriggeringPolicy />
            <SizeBasedTriggeringPolicy size="${logFileSize}" />
        </Policies>
        <DefaultRolloverStrategy max="${logFileCount}" />
    </appender>

    <Routing name="contextSpecificAppender">
        <Routes pattern="$${ctx:contextId}">
            <Route>
                <appender name="Rolling-${ctx:contextId}" type="RollingFile" fileName="logs/${ctx:contextId}.log" filePattern="${logFileNamePattern}" bufferedIO="true" immediateFlush="true" append="true">
                    <layout type="PatternLayout" pattern="${logPattern}" />
                    <Policies>
                        <TimeBasedTriggeringPolicy />
                        <SizeBasedTriggeringPolicy size="${logFileSize}" />
                    </Policies>
                    <DefaultRolloverStrategy max="${logFileCount}" />
                </appender>
            </Route>
        </Routes>
    </Routing>
</appenders>

<loggers>
    <root level="info">
        <appender-ref ref="contextSpecificAppender">
            <ThreadContextMapFilter onMatch="DENY" onMismatch="ACCEPT">
                <KeyValuePair key="contextId" value="" />
            </ThreadContextMapFilter>
        </appender-ref>
        <appender-ref ref="applicationAppender">
            <ThreadContextMapFilter onMatch="ACCEPT" onMismatch="DENY">
                <KeyValuePair key="contextId" value="" />
            </ThreadContextMapFilter>
        </appender-ref>
    </root>
</loggers>

我要做的是根据要记录的追加程序调用ThreadContext.put(“ contextId”,“”)或ThreadContext.put(“
contextId”,“ something”)。我希望可以迅速实现荒野功能,但与此同时,此解决方案对我来说已经足够。

谢谢!



 类似资料:
  • 我正在尝试使用Log4j2的新RoutingAppender来基于MDC(Log4j2中的ThreadContext)路由不同的日志。我想做的是以下几点: null 我希望使用标记中的通配符模式来实现这一点,然后使用for contextId(${ctx:contextId})中的key参数进行筛选,并使用main appender的默认值(没有key参数),但是我不知道哪个值是通配符。 任何帮助

  • 问题内容: 在Go(语言)中注册处理程序时,是否可以在模式中指定通配符? 例如: 其中可以是任何有效的URL字符串。还是唯一的解决方案是从处理程序()函数内部匹配并找出其余部分? 问题答案: http.Handler和http.HandleFunc的模式不是正则表达式或glob。无法指定通配符。它们记录在这里。 也就是说,创建自己的可以使用正则表达式或所需的任何其他模式的处理程序并不难。这是一个使

  • 我正在使用log4j在我的一个应用程序上做一些日志记录。我的配置文件中的日志记录程序如下所示。 基本上,我希望从我写的代码中获得“信息”级别的消息,但是我希望外部库只在有警告或更可怕的情况下记录。 这正如我所期望的那样工作,但是在“org.eclipse.jetty”下有很多类 有可能这样做吗? 也就是说,我希望整个包中的所有内容都只警告/错误/致命。 我试了上述方法,但没有效果。是否有一个“通配

  • 请考虑以下示例:https://logging.apache.org/log4j/2.x/manual/configuration.html 使用上面的示例,我得到了以下输出: 并且没有记录任何内容。 为了解决这个问题,我必须使用其他模式,比如: 这是唯一的工作方式和日志的东西。 顺便说一句,我正在使用以下maven依赖项导入:

  • 我们希望将所有java应用程序日志集中在Graylog服务器上。我们使用apache tomcat作为容器,使用log4j作为日志框架。log4j2.xml 伐木工人 日志详细信息 正如你们所见,我的应用程序与gray log server创建了一个套接字连接。但是我们在灰色日志服务器上没有看到任何日志 版本:tomcat-9.0.16.0 jdk-1.8.0_201-b09(64位) log4j

  • 问题内容: 我正在编写一个简单的调试程序,该程序将简单的字符串作为输入,其中可以包含星号以指示通配符匹配-任何 我以为我会简单地采用该模式,转义其中的任何正则表达式特殊字符,然后将其替换为。然后使用正则表达式匹配器。 但是我找不到任何Java函数来转义正则表达式。我能找到的最佳匹配,然而这正好将与在开始和字符串的结尾。 Java中有什么可以让您简单地进行通配符匹配而不必从头开始实现算法的? 问题答