我在我的应用程序中使用log4j。
如果我想打开一个包的日志记录,我可以简单地在[在我的log4j.properties文件中]执行以下操作:
log4j.logger.com.myorg.somepackage= DEBUG
这将导致log4j记录来自" com.myorg.somepackage"的任何消息。到我的根记录器。
我的问题是,如果我使用像maven shade这样的插件,如何停止从包中记录?
例如,让我们说你有包" com.myorg.somepackage"它被重新定位(通过maven shade插件)到" com.someotherorg.dependency.com.myorg.somepackage"。
如果我想设置警告级别,我知道我可以执行以下操作:
log4j.logger.com.someotherorg.dependency.com.myorg.somepackage= WARN
但是,在我的情况下,多个项目的依赖关系是阴影,我不想要:
log4j.logger.com.someotherorg.dependency.com.myorg.somepackage= WARN
log4j.logger.com.someotherorg1.dependency.com.myorg.somepackage= WARN
log4j.logger.com.someotherorg2.dependency.com.myorg.somepackage= WARN
...等
那我怎么能让log4j忽略" com.myorg.somepackage"无论包装名称在哪里?有什么样的REGEX我不知道为此吗?
我想做的事情是这样的:
log4j.logger.*.com.myorg.somepackage= WARN
但那不起作用。
答案 0 :(得分:0)
我无法在log4j中找到默认功能,但log4j允许您创建自己的过滤器。
以下是我要解决的问题:
import org.apache.log4j.Level;
import org.apache.log4j.spi.Filter;
import org.apache.log4j.spi.LoggingEvent;
公共类CustomFilterer扩展了Filter {
@Override
public int decide(LoggingEvent event) {
if (!event.getLoggerName().contains("com.myorg.somepackage")) {
return Filter.NEUTRAL;
} else {
if (event.getLevel().isGreaterOrEqual(Level.WARN)) {
return Filter.NEUTRAL;
} else {
return Filter.DENY;
}
}
}
} `