栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何在多个类中使用log4j?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何在多个类中使用log4j?

如果我理解正确,那么您现在的情况是:

public class Main {    public static final Logger LOGGER = Logger.getLogger(Main.class);}public class AnotherClass {    public void doSomething() {        Main.LOGGER.debug("value=" + value);    }}

或者,您将对记录器的引用传递到类的构造函数中。

首先,您可以通过简单地使用传递给Logger.getLogger的相同值来使用一个全局记录器,例如:

public class Main {    private static final Logger LOGGER = Logger.getLogger("GLOBAL");}public class AnotherClass {    private final Logger LOGGER = Logger.getLogger("GLOBAL");    public void doSomething() {        LOGGER.debug("value=" + value);    }}

这使用完全相同的记录器,Logger.getLogger在两个调用中返回相同的对象。您不再在类之间具有依赖关系,这将起作用。

我从评论中收集到的另一件事是,您正在手动配置(使用

BasicConfigurator.configure
。大多数情况下,这不是必需的,您应该通过将log4j.properties或log4j.xml添加到类路径中来进行配置。在Eclipse中,可以通过将其添加到src
/(如果使用maven,则将其添加到src / main / resources)中来完成;如果使用的是junit,则将其添加到test
/源目录(或将src / test / resources与maven)。这是配置log4j的长期更好的方法,因为您不必在类之间传递信息。


另外,推荐使用记录器的方法是将类传递给Logger.getLogger()。这样,您可以根据类名称过滤输出,这通常比仅使用一个全局记录器有用得多:

public class Main {    private static final Logger LOGGER = Logger.getLogger(Main.class);    public static final main(String[] args) {        LOGGER.debug("started");    }}public class AnotherClass {    private final Logger LOGGER = Logger.getLogger(this.getClass());    public void doSomething() {        LOGGER.debug("value=" + value);    }}

然后,在log4j.properties中,可以为一个文件配置一个附加程序。

# Set root logger level to DEBUG and its only appender to A1.log4j.rootLogger=DEBUG, A1# A1 is set to be a ConsoleAppender.log4j.appender.A1=org.apache.log4j.ConsoleAppender# A1 uses PatternLayout.log4j.appender.A1.layout=org.apache.log4j.PatternLayoutlog4j.appender.A1.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n

最后,没有必要将所有记录器声明为静态。仅当您要进行 大量
[*]对象创建时,这才有明显的不同。将记录器声明为非静态字段可让您使用,

Logger.getLogger(this.getClass());
在这种情况下,将记录器添加到类中将成为单行的剪切和粘贴。此slf4j页包含了有关优缺点的详尽说明。因此,除非您有充分的理由不这样做,否则请使用非静态字段。

Cameron说对了,他说您应该尝试并尽可能使用slf4j,它是一个杀手级功能,可以与它一起使用多个日志记录框架,这是正确的。

[*]我的意思是很多。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/497824.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号