[英]log4j2 marker and isEnabled
我试图确定Log4j 2中是否存在Marker的记录器。实际记录时,过滤器起作用。 问题是检查isEnabled(level,marker)时。 如果MakerFilters在配置级别,则它将按预期工作。 如果处于记录器或附加程序级别,则它会绕过标记并仅考虑阈值级别。
查看文档,看起来是否接受/拒绝是在配置级别,那么它将不检查任何其他过滤器,并且将保留该状态,因此在这里可以正常使用。
我想弄清楚的是如何在Logger级别进行配置,以便Logger.isEnabled(Level,Marker)的响应与调用Logger.log(Level,Marker,msg)时的响应相同。
有没有一种方法可以配置此配置,或者这是两种方法响应不同的预期行为?
使用以下命令运行测试:Log4j 2.0-rc1
谢谢
这里的日志记录语句检查每个标记是否已启用。 DB_OP是DB_DELETE和DB_QUERY的父标记。
private final static Logger log = LogManager.getLogger(TestLog2.class);
public int method2(String string, int i) {
Level logLevel = Level.INFO;
log.entry(string, i);
int x = i + 2;
System.out.printf("Level: %s is enabled: %s%n", logLevel, log.isEnabled(logLevel));
// This should return false
System.out.printf("Level: %s : DB_DELETE is enabled: %s%n", logLevel, log.isEnabled(logLevel, DbMarkers.DB_DELETE.getMarker()));
System.out.printf("Level: %s : DB_QUERY is enabled: %s%n", logLevel, log.isEnabled(logLevel, DbMarkers.DB_QUERY.getMarker()));
System.out.printf("Level: %s : DB_OP is enabled: %s%n", logLevel, log.isEnabled(logLevel, DbMarkers.DB_OP.getMarker()));
log.log(logLevel, DbMarkers.DB_OP.getMarker(), "This is a parent db marker message");
// This should not print
log.log(logLevel, DbMarkers.DB_DELETE.getMarker(), "This is a delete marker message");
log.log(logLevel, DbMarkers.DB_QUERY.getMarker(), "This is a query marker message");
log.exit(x);
return x;
}
在记录器级别配置标记过滤器。 设置为拒绝DB_DELETE,但接受DB_OP(包括DB_QUERY)
<Configuration status="error" strict="true" name="XMLConfigTest"
packages="org.apache.logging.log4j.test">
<Appenders>
<Appender type="Console" name="DB">
<Layout type="PatternLayout"
pattern="DB: %d{HH:mm:ss.SSS} [%t] %-5level %C{1}.%M %m %marker %ex%n" />
</Appender>
<Appender type="Console" name="STDOUT">
<Layout type="PatternLayout" pattern="STDOUT: %d{HH:mm:ss.SSS} [%t] %-5level %C{1}.%M %m %marker %ex%n" />
</Appender>
</Appenders>
<Loggers>
<Logger name="net.dt.log.test2" level="info" additivity="false">
<AppenderRef ref="DB" />
<Filters>
<Filter type="MarkerFilter" marker="DB_DELETE" onMatch="DENY" onMismatch="NEUTRAL" />
<Filter type="MarkerFilter" marker="DB_OP" onMatch="ACCEPT" onMismatch="DENY" />
</Filters>
</Logger>
<Root level="info">
<AppenderRef ref="STDOUT">
<Filter type="MarkerFilter" marker="DB_OP" onMatch="DENY" onMismatch="NEUTRAL" />
</AppenderRef>
</Root>
</Loggers>
</Configuration>
对于所有标记查询,isEnabled返回true。 不记录DB_DELETE日志条目。
STDOUT: 15:00:13.655 [main] ERROR TestLog1.method1 An error in TestLog1 : Should see this
Level: INFO is enabled: true
Level: INFO : DB_DELETE is enabled: true <---- This should be false
Level: INFO : DB_QUERY is enabled: true
Level: INFO : DB_OP is enabled: true
DB: 15:00:13.659 [main] INFO TestLog2.method2 This is a parent db marker message DB_OP
--- DB_DELETE log entry would be here if it was configured to accept.
DB: 15:00:13.660 [main] INFO TestLog2.method2 This is a query marker message DB_QUERY[ DB_OP ]
现在在配置级别使用过滤器
<Configuration status="error" strict="true" name="XMLConfigTest"
packages="org.apache.logging.log4j.test">
<Filters>
<Filter type="MarkerFilter" marker="DB_DELETE" onMatch="DENY" onMismatch="NEUTRAL" />
<Filter type="MarkerFilter" marker="DB_OP" onMatch="ACCEPT" onMismatch="NEUTRAL" />
</Filters>
<Appenders>
<Appender type="Console" name="DB">
<Layout type="PatternLayout"
pattern="DB: %d{HH:mm:ss.SSS} [%t] %-5level %C{1}.%M %m %marker %ex%n" />
</Appender>
<Appender type="Console" name="STDOUT">
<Layout type="PatternLayout" pattern="STDOUT: %d{HH:mm:ss.SSS} [%t] %-5level %C{1}.%M %m %marker %ex%n" />
</Appender>
</Appenders>
<Loggers>
<Logger name="net.dt.log.test2" level="info" additivity="false">
<AppenderRef ref="DB" />
<Filters>
<Filter type="MarkerFilter" marker="DB_DELETE" onMatch="DENY" onMismatch="NEUTRAL" />
<Filter type="MarkerFilter" marker="DB_OP" onMatch="ACCEPT" onMismatch="DENY" />
</Filters>
</Logger>
<Root level="info">
<AppenderRef ref="STDOUT">
<Filter type="MarkerFilter" marker="DB_OP" onMatch="DENY" onMismatch="NEUTRAL" />
</AppenderRef>
</Root>
</Loggers>
现在,isEnabled对DB_DELETE返回false,对其他DB_OP标记返回true。
STDOUT: 15:24:33.565 [main] ERROR TestLog1.method1 An error in TestLog1 : Should see this
Level: INFO is enabled: true
Level: INFO : DB_DELETE is enabled: false <----- Now it shows as false
Level: INFO : DB_QUERY is enabled: true
Level: INFO : DB_OP is enabled: true
DB: 15:24:33.570 [main] INFO TestLog2.method2 This is a parent db marker message DB_OP
DB: 15:24:33.570 [main] INFO TestLog2.method2 This is a query marker message DB_QUERY[ DB_OP ]
目前在log4j-Dev邮件列表上正在进行有关标记的讨论。 您的输入和用例对实现者可能非常有用。 您可以提出问题加入邮件列表吗? 或者用您的示例配置和代码来提出一个Jira。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.