我正在使用一个外部包,它使用log4j非常冗长。我查看了代码并找到了预期的log4j
行:
private Logger log = Logger.getLogger("SomeLoggerName");
...
log.info("Trivial message");
log.info("More trivial data");
由于我无法更改代码,因此我尝试更改log4j.xml
:
<category name="SomeLoggerName">
<level value="${log4j_level:-WARN}"/>
<appender-ref ref="FileLogger"/>
</category>
我猜测category name
属性等同于记录器名称。这是真的吗?如果没有,我如何按记录器名称过滤?
答案 0 :(得分:3)
实际上,您可以使用<logger>
作为元素名称,例如
<logger name="SomeLoggerName">
<level value="${log4j_level:-WARN}"/>
<appender-ref ref="FileLogger"/>
</logger>
我认为category
是为了向后兼容,并且不推荐使用它。
答案 1 :(得分:3)
如果您只是想降低冗长程度,我只会提高优先级:
<category name="SomeLoggerName">
<level value="WARN"/>
</category>
否则,您可能希望向现有的appender添加filter。首先,实现log4j过滤器。在您的情况下,确定日志事件是否来自不需要的类将是一个简单的比较。像这样的东西会起作用:
public class MyAuditFilter extends Filter{
@Override
public int decide(LoggingEvent event) {
if(event.getClass.getCanonicalName().equalsIgnoreCase("class.you.don't.want"))
return Filter.DENY;
else
return Filter.ACCPET;
}
}
实现过滤器之后,只需将其添加到log4j appender中,如下所示:
<appender name="myAppender" class="my.appender.class">
.
.
<filter class="my.namespace.MyAuditFilter">
<param name="AcceptOnMatch" value="True"/>
</filter>
.
.
</appender>
如果您需要更多控制权,过滤器将能够对您的日志记录进行非常精细的控制。
答案 2 :(得分:1)
你是对的,记录器==类别。您的配置有问题吗?一般来说它看起来不错,应该可以工作。