Java 指定特定类的级别

Java 指定特定类的级别,java,log4j,Java,Log4j,如果我需要将包级别的阈值设置为INFO我可以为我的包MyPck进行设置,如: log4j.logger.MyPck=INFO,debugLogFile 我可以不在包上设置阈值,而是在类级别设置阈值吗?比如: log4j.logger.MyPck.MyClass=INFO,debugLogFile 简而言之,答案是肯定的 但是,默认情况下,每个记录器都继承其父记录器的属性。e、 g: 考虑一下简单的Java类: package com.abc; import org.apache.log4

如果我需要将包级别的阈值设置为
INFO
我可以为我的包
MyPck
进行设置,如:

log4j.logger.MyPck=INFO,debugLogFile
我可以不在包上设置阈值,而是在类级别设置阈值吗?比如:

log4j.logger.MyPck.MyClass=INFO,debugLogFile
简而言之,答案是肯定的


但是,默认情况下,每个记录器都继承其父记录器的属性。e、 g:

考虑一下简单的Java类:

package com.abc;

import org.apache.log4j.Logger;

class AnotherClass {
    private static Logger LOG = Logger.getLogger(AnotherClass.class);
    public AnotherClass() {
        LOG.trace("Instance created of AnotherClass");
    }
}

public class MyClass {
    private static Logger LOG = Logger.getLogger(MyClass.class);
    public MyClass() {
        LOG.trace("Instance created of MyClass");
    }
    public void foo() {
        LOG.info("Executing foo()...");
    }
    public static void main(String[] args) {
        new MyClass().foo();
        new AnotherClass();
    }
}
以及
log4j.properties

log4j.appender.STDOUT=org.apache.log4j.ConsoleAppender
log4j.appender.STDOUT.layout=org.apache.log4j.SimpleLayout

log4j.logger.com.abc=TRACE,STDOUT
log4j.logger.com.abc.MyClass=INFO,STDOUT
在本例中,
STDOUT
配置到记录器
com.abc
中。因此,
com.abc.MyClass
继承并写入该对象。请参见输出:

INFO - Executing foo()...
INFO - Executing foo()...
TRACE - Instance created of AnotherClass
发生什么事了?为什么两次?属性
可加性
可以防止这种传播

log4j.appender.STDOUT=org.apache.log4j.ConsoleAppender
log4j.appender.STDOUT.layout=org.apache.log4j.SimpleLayout

log4j.logger.com.abc=TRACE,STDOUT
log4j.logger.com.abc.MyClass=INFO,STDOUT
log4j.additivity.com.abc.MyClass=false
因此,我们将看到:

INFO - Executing foo()...
TRACE - Instance created of AnotherClass