如何在 logback.xml 中过滤特定的 class 记录器?
how to filter specific class logger in logback.xml?
我们尝试过滤从一个 class:
生成的日志
com.websudos.phantom
两个进球:
除了来自此 calss 的日志外,所有来自应用程序的日志都保存在文件中
此文件中的所有日志都已传输到 graylog。
我们使用此过滤器通过正则表达式过滤了这些日志:
<filter class="ch.qos.logback.core.filter.EvaluatorFilter">
<evaluator>
<matcher>
<Name>parameter</Name>
<regex>Executing query</regex>
</matcher>
<expression>parameter.matches(formattedMessage)</expression>
</evaluator>
<OnMismatch>DENY</OnMismatch>
<OnMatch>ACCEPT</OnMatch>
</filter>
此 class 的 Executing query
正则表达式:com.websudos.phantom
并且我们不接受将此class的级别设置为OFF
,因为我们需要将此日志传输到graylog而不是保存在文件中!
有什么解决办法吗?
这是一个解决方案:
<filter class="ch.qos.logback.core.filter.EvaluatorFilter">
<evaluator> <!-- defaults to type ch.qos.logback.classic.boolex.JaninoEventEvaluator -->
<expression>logger.equals("com.websudos.phantom")</expression>
</evaluator>
<OnMismatch>NEUTRAL</OnMismatch>
<OnMatch>DENY</OnMatch>
</filter>
通过将此过滤器添加到任何附加程序,来自 class com.websudos.phantom
的日志将被忽略
XML:
<filter class="com.websudos.loggers.ClassNameFilter">
<className>com.websudos.phantom</className>
<onMatch>ACCEPT</onMatch>
</filter>
Java:
package com.websudos.loggers;
import ch.qos.logback.classic.spi.ILoggingEvent;
import ch.qos.logback.core.filter.AbstractMatcherFilter;
import ch.qos.logback.core.spi.FilterReply;
public class ClassNameFilter extends AbstractMatcherFilter<ILoggingEvent> {
String loggerName;
@Override
public FilterReply decide(ILoggingEvent event) {
if (!isStarted()) {
return FilterReply.NEUTRAL;
}
if (event.getLoggerName().equals(loggerName)) {
return onMatch;
} else {
return onMismatch;
}
}
public void setClassName(String className) {
this.loggerName = className;
}
@Override
public void start() {
if (this.loggerName != null) {
super.start();
}
}
}
您可以很容易地修改它来检查日志记录级别。有关示例,请参阅 ch.qos.logback.classic.filter.LevelFilter
。
我们尝试过滤从一个 class:
生成的日志com.websudos.phantom
两个进球:
除了来自此 calss 的日志外,所有来自应用程序的日志都保存在文件中
此文件中的所有日志都已传输到 graylog。
我们使用此过滤器通过正则表达式过滤了这些日志:
<filter class="ch.qos.logback.core.filter.EvaluatorFilter">
<evaluator>
<matcher>
<Name>parameter</Name>
<regex>Executing query</regex>
</matcher>
<expression>parameter.matches(formattedMessage)</expression>
</evaluator>
<OnMismatch>DENY</OnMismatch>
<OnMatch>ACCEPT</OnMatch>
</filter>
此 class 的 Executing query
正则表达式:com.websudos.phantom
并且我们不接受将此class的级别设置为OFF
,因为我们需要将此日志传输到graylog而不是保存在文件中!
有什么解决办法吗?
这是一个解决方案:
<filter class="ch.qos.logback.core.filter.EvaluatorFilter">
<evaluator> <!-- defaults to type ch.qos.logback.classic.boolex.JaninoEventEvaluator -->
<expression>logger.equals("com.websudos.phantom")</expression>
</evaluator>
<OnMismatch>NEUTRAL</OnMismatch>
<OnMatch>DENY</OnMatch>
</filter>
通过将此过滤器添加到任何附加程序,来自 class com.websudos.phantom
的日志将被忽略
XML:
<filter class="com.websudos.loggers.ClassNameFilter">
<className>com.websudos.phantom</className>
<onMatch>ACCEPT</onMatch>
</filter>
Java:
package com.websudos.loggers;
import ch.qos.logback.classic.spi.ILoggingEvent;
import ch.qos.logback.core.filter.AbstractMatcherFilter;
import ch.qos.logback.core.spi.FilterReply;
public class ClassNameFilter extends AbstractMatcherFilter<ILoggingEvent> {
String loggerName;
@Override
public FilterReply decide(ILoggingEvent event) {
if (!isStarted()) {
return FilterReply.NEUTRAL;
}
if (event.getLoggerName().equals(loggerName)) {
return onMatch;
} else {
return onMismatch;
}
}
public void setClassName(String className) {
this.loggerName = className;
}
@Override
public void start() {
if (this.loggerName != null) {
super.start();
}
}
}
您可以很容易地修改它来检查日志记录级别。有关示例,请参阅 ch.qos.logback.classic.filter.LevelFilter
。