java - 如何禁用标记记录器上的可加性?

标签 java logging configuration log4j log4j2

我已经定义了一个标记,并且只想将其记录到特定文件中。因此我尝试设置additivity = false。但它不起作用,并且仍然还记录到我的全局日志文件中。这里可能出了什么问题?

<Configuration>
    <Appenders>
        <RollingFile name="TEST" fileName="test.log" filePattern="test1.log">
            <MarkerFilter marker="TEST_LOG" onMatch="ACCEPT" onMismatch="DENY"/>
        </RollingFile>
        <RollingFile name="GLOBAL" fileName="global.log" filePattern="global.log">
            <ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/>
            <MarkerFilter marker="TEST_LOG" onMatch="DENY" onMismatch="ACCEPT"/>
        </RollingFile>
    </Appenders>

    <Loggers>
        <logger name="foo" additivity="false">
            <appender-ref ref="TEST" />
        </logger>
    </Loggers>
</Configuration>

用法:

LogManager.getRootLogger().info(MarkerManager.getMarker("TEST_LOG"), "test log");

最佳答案

在示例代码中,标记名为“TEST”,但在配置中,MarkerFilter 仅接受带有标记“TEST_LOG” 的日志事件。配置和代码应该使用相同的字符串。

此外,您可能需要定义两个 Appender:一个用于您的全局日志文件,另一个用于您的特定(标记)日志事件。然后仅在您的特定附加程序中接受标记的日志事件,并在全局附加程序中拒绝标记的日志事件。

关于java - 如何禁用标记记录器上的可加性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21282831/

相关文章:

java - Stripes 框架中的对话范围

mysql - 我可以在 InnoDB 事务期间检索挂起的查询吗?

c# - 有用的日志格式/格式?

php - 为 Symfony MicroKernel 注册自定义配置命名空间

ubuntu - Docker 容器中的 X11 没有 $DISPLAY 时无法自动启动 dbus-daemon

JavaFX TextArea.append() 导致 java.lang.NullPointerException

java - 如何暂停javafx类

Python 记录 FileHandler 输出空白文件

php - php 是否有相当于 python 的 virtualenv 或 ruby​​ 的沙箱?

C编译器可以在运行时消除这个条件测试吗?