首页 > 解决方案 > 在 Wildfly Logger 中使用多个过滤器规格

问题描述

我正在使用Wildfly 10,我想将服务器日志存储在json带有一些过滤器的文件中,这是我的日志:

{
    "msg": "\n[\"getDataMethod\" req. received]\n[password: ***]\n[prop2: value2]]\n",
    "field1": "value1"
}{
    "msg": "\n[call \"getDataMethod\"]\n[password: ***]\n[prop2: value2]]\n",
    "field2": "value2"
}{
    "msg": "full-XML SOAP request",
    "field3": "value3"
}{
    "msg": "\n[\"getDataMethod\" finished...]\n[password: ***]\n[prop2: value2]]\n",
    "field4": "value4"
}

但是这个日志文件有两个问题:

  1. msg字段包含关键信息(如密码),我想过滤它们。
  2. 有些信息是多余的,我不想存储它们。(例如,节点包含“req. received”或“call getDataMethod”)

为了解决问题#1,我写了这个filter-spec并删除了所有存储桶regex

<logger category="org.somePackags.MyClass" use-parent-handlers="false">
    <level name="INFO" />
    <filter-spec value="all(match(&quot;\\[(.*)\\]&quot;),substituteAll(&quot;\\[(.*)\\]&quot;, &quot; &quot;))" />
    <handlers>
        <handler name="JsonLog" />
    </handlers>
</logger>

现在我想添加规则以filter-spec排除与问题 #2 匹配的节点,我阅读了 FilterExpressions,但我不知道如何编写 Multiple filter-spec。任何想法?

标签: loggingfilterwildflyhandlerwildfly-10

解决方案


过滤器将处理链中的all每个过滤器,如果链中的任何过滤器认为消息不可记录,则不记录该消息。all带有substituteAll过滤器的似乎确实是您应该使用的过滤器。您只需substituteAll在链中添加更多过滤器。

您需要弄清楚的是替换数据的模式。您也可以删除match它,看起来它只是匹配所有内容。


推荐阅读