我的应用程序在各种日志记录级别记录错误事件。 ERR1& ERR2是DEBUG级别。 ERR3是INFO级别。 ERR4是ERROR级别。
如何在Wildfly中配置日志记录子系统,以便始终记录ERR2,无论根记录器的配置级别如何,而不会更改我的应用程序中的哪些其他事件被记录?
因此,如果我的根记录器处于DEBUG级别,我应该看到:
18:31:09,476 DEBUG [org.myapp] (default task-1) ERR1: Test
18:31:09,476 DEBUG [org.myapp] (default task-1) ERR2: Test
18:31:09,476 INFO [org.myapp] (default task-1) ERR3: Test
18:31:09,476 ERROR [org.myapp] (default task-1) ERR4: Test
但如果我的根记录器处于ERROR级别,我应该看到:
18:31:09,476 DEBUG [org.myapp] (default task-1) ERR2: Test
18:31:09,476 ERROR [org.myapp] (default task-1) ERR4: Test
我试过了:
<logger category="org.myapp">
<filter-spec value="match("ERR2"))"/>
<handlers>
<handler name="CONSOLE"/>
</handlers>
</logger>
现在我看到了ERR2,但它隐藏了我的包中的所有其他记录事件。我也尝试过:
<logger category="org.myapp">
<filter-spec value="any(match("ERR2")),levels(ERROR))"/>
<handlers>
<handler name="CONSOLE"/>
</handlers>
</logger>
更接近,因为我得到了ERR2和所有ERROR级事件,但这要求我保持levels
内的条目与我的根记录器级别同步。因此,如果我将根记录器更改为INFO并忘记更改org.myapp记录器,我将丢失org.myapp中的所有INFO事件。
那么在我的日志中开始包含ERR2事件而不影响我的包中的其他事件的最佳方法是什么?
答案 0 :(得分:0)
需要注意的一点是,记录器上的过滤器不会被继承。所以你有一个名为com.myapp.other
的记录器,不会使用过滤器。
如果这不是问题,您可以在过滤规范中进行反向匹配。像not(match("ERR1|ERR2")
这样的东西。 CLI命令类似于:
/subsystem=logging/logger=com.myapp:write-attribute(name=filter-spec, value=not(match("ERR1|ERR2")))