如何在代码中使用log4j?

sus*_*ani 2 java singleton log4j

我们必须在我们的应用程序中引入日志.我们决定使用log4j是一个不错的选择.还有人告诉我们应该使用单例模式来使用log4j可以有人强调如何以及为什么?

Ada*_*ter 6

在单例模式中,该Logger字段对于类是静态的:

public class SomeAwesomeClass {

    private static final Logger logger = Logger.getLogger(SomeAwesomeClass.class);

}
Run Code Online (Sandbox Code Playgroud)

另一种方法是使Logger字段非静态(即每个实例的实例都SomeAwesomeClass引用Logger):

public class SomeAwesomeClass {

    private final Logger logger = Logger.getLogger(SomeAwesomeClass.class);

}
Run Code Online (Sandbox Code Playgroud)

我不认为你选择哪条路线会产生很大的不同,因为我相信Log4j会不断Logger为每个实例返回相同的实例SomeAwesomeClass.实际上,它只是不必要的对象引用,所以你不妨使用单例模式.

但是,如果您执行以下操作,则非单例模式变得必要:

public class SomeAwesomeClass {

    private final Logger logger = Logger.getLogger(getClass());

    public void doSomething() {
        log.info("Doing something");
    }

}

public class AwesomerClass extends SomeAwesomeClass {
}
Run Code Online (Sandbox Code Playgroud)

后来...

SomeAwesomeClass o = new AwesomerClass();
o.doSomething();
Run Code Online (Sandbox Code Playgroud)

在此示例中,该logger字段将对应于AwesomerClass,而不是SomeAwesomeClass.


Ara*_*ram 5

如果您是第一次引入日志记录,请使用Logback.使用此处建议的配置文件 并将其添加到类路径中.记录将自动配置.