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

如何使用Log4j2 xml重写附加程序在登录文件之前修改LogEvent

丌官嘉福
2023-03-14
问题内容

我想在log4j2.xml文件中使用重写追加程序,以便在记录之前可以修改日志。我没有从Google获得太多帮助。根据log4j2文档,Rewrite是具有重写方法的接口,而MapRewritePolicy是实现类,当我运行它时,我能够看到我的web3.log文件正在生成,但是看不到日志内容的任何修改。我看到了MapRewritePolicy源代码,并在我的项目中将本地实现类创建为MapRewritePolicyImpl.java,并放置了一些System.out来查看代码流是否从log4j2.xml文件进入此类。我已经修改了log4j2.xml以使用MapRewritePolicyImpl.java,但是代码流没有进入MapRewritePolicyImpl.java类。

<Rewrite name="rewrite" >
            <Appender-Ref ref="web3" />
             <MapRewritePolicyImpl">
                <KeyValuePair key="creditCard" value="new12345"/>
            </MapRewritePolicyImpl> 
        </Rewrite>



    <Configuration monitorInterval="5" status="debug" strict="true">
        <Appenders>
            <RollingFile name="web3" fileName="../logs/web3.log" 
                filePattern="${sys:catalina.home}/logs/$${date:yyyy-MM-dd}/web3-%d{yyyy-MM-dd}-%i.log.gz">
                <PatternLayout
                    pattern="%d{dd/MM/yyyy HH:mm:ss,SSS} [%X{cartID}] [%X{sessionId}] [%p] [%t] [%c] (%F:%L)  - %m%n" />
                <Policies>
                    <TimeBasedTriggeringPolicy interval="1"
                        modulate="true" />
                    <SizeBasedTriggeringPolicy size="10 MB" />

                </Policies>
            </RollingFile>
            <Rewrite name="rewrite" >
                <Appender-Ref ref="web3" />
                 <MapRewritePolicy">
                    <KeyValuePair key="creditCard" value="new12345"/>
                </MapRewritePolicy> 
            </Rewrite>
    </Appenders>
    <Loggers>
        <Logger name="com.virginamerica" level="info" additivity="false">
            <!-- <Appender-Ref ref="web3" /> -->
            <Appender-Ref ref="rewrite"/>
        </Logger>
    </Loggers>
</Configuration>

问题答案:

MapRewritePolicy将评估包含MapMessage的LogEvent,并添加或更新Map的元素。这仅在您的应用程序调用时有效logger.info(new MapMessage(keyValueMap))。我怀疑这不是您的应用程序当前正在执行的操作。

通常,您的消息将是SimpleMessage(如果您调用logger.info("Just a string without parameters"))或ParameterizedMessage(如果您调用logger.info("Hi {}!", name))。RewriteAppender将无法对SimpleMessage或ParameterizedMessages进行任何操作,因此什么也不会被替换…

您可能想看一下PatternLayout的文档:如果使用replace{pattern}{regex}{substitution}模式,它可以用一些替换值替换字符串消息中的正则表达式。



 类似资料:
  • 我正在使用Larave Jetstream livewire,我想修改登录名。 从初始值为1的隐藏输入字段“is_admin”登录 当用户提交登录表单后端检查时,使用数据库表字段的is\u admin=1 表结构:名称、电子邮件、密码、is_admin is_admin=0或1 我想检查is_admin标志,如果提供的凭据与电子邮件、密码和is_admin=1匹配,则只有用户可以登录。

  • 我想为一个特定的方法调用MyMethod()创建并启用一个appender,该方法的日志输出应该放在“logFilePath”中的一个文件中。 我对log4j不是很熟悉,所以请随时建议一个替代的方法。下面是示例代码来解释我正在尝试的内容。 我按以下方式调用上述方法:

  • 基本上:我如何访问或确定以前请求的URL? 我真的不想求助于传递查询字符串参数,除非我真的不得不这样做。理想情况下,最好能够将< code>history集合作为< code>Router组件的一部分,类似于< code>backbone.history!

  • 我希望能够为每个日志消息执行一个方法,允许我在日志记录之前动态修改该消息。我知道有一些过滤器允许我指示是否应该记录消息,但我不想阻止记录消息,我只想在记录之前对其进行修改。我该怎么做呢? 注意:我问了这个关于log4j2的问题,但我也对其他流行Java日志框架持开放态度。

  • 本文向大家介绍CentOS7如何修改SSH登录端口,包括了CentOS7如何修改SSH登录端口的使用技巧和注意事项,需要的朋友参考一下 centos7修改ssh默认登录端口和centos6差不多,就是防火墙不一样,然后关闭selinux最好。 【修改ssh默认22端口】 在Port 22下面加一行,以端口50000为例,Port 50000 然后保存,重启ssh服务systemctl restar

  • 问题内容: 我想根据以下条件在PHP中修改我的xml文件。 我的xml结构如下所示: 现在每次在xml进行修改时,都带有type属性。 意味着,第一次搜索字符串==“ hotels”时,与酒店有关的数据将以上述格式存储在xml文件中。 现在,当再次搜索酒店时,它将删除具有带有值酒店的子元素的元素。 然后在与学校相关的数据附加到xml文件时,进行针对学校的不同查询。与酒店的数据。 现在再次搜索学校已