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

Log4j2 Regexfilter似乎忽略了筛选器配置

明安阳
2023-03-14

我试图从管理各种Tomcat实例的应用程序生命周期的第三方工具的正常应用程序日志中筛选出ApacheTomcat启动(/关闭)事件。基础是log4j2(2.12.1),appender context中使用regexfilter,用于简单的文件追加器(下面的示例进行了大量简化,包括硬编码值):

<Properties>
    <Property name="fileName" value="logs/application.log" />
    <Property name="filePattern" value="logs/application-%d{MM-dd-yyyy}-%i.log.gz" />
    <Property name="pattern" value="%d{ISO8601} %-5p %c - [%t] %m %n"/>
</Properties>
<Appenders>
    <RollingFile name="APPLICATION" fileName="${fileName}" filePattern="${filePattern}" bufferedIO="true" append="true">
        <PatternLayout pattern="${pattern}" alwaysWriteExceptions="true" />
        <Policies>
            <TimeBasedTriggeringPolicy />
            <SizeBasedTriggeringPolicy size="50 MB"/>
        </Policies>
        <DefaultRolloverStrategy min="1" max="5" compressionLevel="5" />
    </RollingFile>
    <File name="STARTUP" fileName="logs/startup.log" bufferedIO="true" immediateFlush="true" append="true">
        <PatternLayout>
            <Pattern>%d %m%n</Pattern>
        </PatternLayout>
        <Filters>
            <RegexFilter regex=".* startup .*" onMatch="ACCEPT" onMismatch="DENY"/>
            <RegexFilter regex=".* Java Home .*" onMatch="ACCEPT" onMismatch="DENY"/>
        <Filters>
    </File>
</Appenders>

相应的记录器如下所示:

<Logger name="org.apache.catalina.startup" level="INFO" additivity="false">
    <Appender-ref ref="STARTUP"  />
    <Appender-ref ref="APPLICATION"  />
</Logger>

当我启动实例时,将创建两个日志文件。但是,只有应用程序日志文件(application appender)包含条目,其中包括我感兴趣的要过滤掉的条目:

[ec2-user@AWS:./logs] $ grep -Ern "\[main\].*Java Home|\[main\].*Server startup" application.log
4415:2020-03-26T17:40:15,226 INFO  org.apache.catalina.startup.VersionLoggerListener - [main]   Java Home:             /opt/jdk1.8.0_201/jre
4588:2020-03-26T17:41:04,578 INFO  org.apache.catalina.startup.Catalina - [main]   Server startup in 49087 ms
4786:2020-03-26T17:48:18,043 INFO  org.apache.catalina.startup.VersionLoggerListener - [main]   Java Home:             /opt/jdk1.8.0_201/jre
4959:2020-03-26T17:49:04,625 INFO  org.apache.catalina.startup.Catalina - [main]   Server startup in 46323 ms
5396:2020-03-26T17:57:58,673 INFO  org.apache.catalina.startup.VersionLoggerListener - [main]   Java Home:             /opt/jdk1.8.0_201/jre
5569:2020-03-26T17:58:45,442 INFO  org.apache.catalina.startup.Catalina - [main]   Server startup in 46543 ms
6182:2020-03-26T18:13:39,914 INFO  org.apache.catalina.startup.VersionLoggerListener - [main]   Java Home:             /opt/jdk1.8.0_201/jre
6355:2020-03-26T18:14:27,238 INFO  org.apache.catalina.startup.Catalina - [main]   Server startup in 47073 ms
7096:2020-03-26T18:32:39,525 INFO  org.apache.catalina.startup.VersionLoggerListener - [main]   Java Home:             /opt/jdk1.8.0_201/jre
7266:2020-03-26T18:33:27,550 INFO  org.apache.catalina.startup.Catalina - [main]   Server startup in 47812 ms

有什么想法,如何调试,为什么这不工作,还是我错过了一些明显的东西?我已经执行了大量的尝试和错误配置(包括Compositefilter配置,尽管即使使用一个Regexfilter也不起作用),并且还启用了log4j2调试(StatusLogger看起来很好),但是根本没有任何迹象表明哪里出错,或者为什么匹配行没有单独路由到配置的fileappender日志中。

共有1个答案

闻人锦
2023-03-14

解决方案:regex似乎是错误的,去掉“startup”周围的空格使其工作。

        <RegexFilter regex=".*startup.*" onMatch="ACCEPT" onMismatch="DENY"/>

不幸的是,没有一种明智的方法来检查在求值期间应用了哪些regex规则。幸运的是,现在有一个文档化的例子供其他人查阅。

 类似资料:
  • 我试图自定义Grails应用程序的日志配置,但appender(及其布局模式)似乎被忽略了。 在配置中。非常棒: Log4J实际上考虑了logger部分(例如,如果我对hibernate的debug和trace行进行注释,那么hibernate语句的记录将按预期停止)。 但我一直在尝试appenders部分的不同版本,似乎都没有考虑,实际上应用于控制台的格式只包括消息本身(例如,如果我编写 在代码

  • 问题内容: 我想在VPS上运行一个用Java编写的非常简单的机器人。我想将jvm内存限制为10MB(我怀疑是否需要更多内存)。 我正在使用以下命令运行机器人: java -Xms5M -Xmx10M -server -jar IrcBot.jar“ / home / jbot” 但是表明为Java保留的实际内存是(或者我在这里解释错了吗?)。 13614 jbot 17 0 144米 16米674

  • 我们在java ee应用程序中使用Log4j2。我们使用一个库,其中日志是根据SLF4J编程的。在这个库中有一个类,它记录了很多我不想要的东西- 我的日志4J2。xml如下所示: 但是,BaseSerializingTranscoder仍然记录错误。如果我做一个简单的测试,并将BaseSerializingTranscoder中找到的日志代码放在测试函数中,我会看到记录器是通过org检索的。slf

  • 我在配置Spring MessageSource以忽略我的系统区域设置时遇到问题。当我使用null locale参数调用getMessage时,我希望我的MessageSource选择默认属性文件messages.properties.相反,它选择messages_en.properties.当我将此属性文件的名称更改为messages_fr.properties然后选择默认属性文件。我的系统区域

  • 我已经为这个问题挣扎了几天了,希望有人能帮上忙。 当我的应用程序尝试构建Hibernate3 SessionFactory时,我遇到以下错误: 下面是我的/WEB-INF/jboss网站。xml: Hibernate在我的单元测试中运行良好,只有当我将其部署到测试服务器时才会发生这种情况。 从我发现的情况来看,这似乎是因为jboss已经有了dom4j的副本。 不,我无法从我的项目中删除dom4j,

  • JNA还加载正确的库。 这里有人知道为什么不起作用吗?是因为我使用的是带有清单的jar应用程序文件吗? 有人有类似的问题吗?