【问题标题】:log4j - Configuring logger namelog4j - 配置记录器名称
【发布时间】:2015-02-25 19:54:02
【问题描述】:

我使用log4j 已经有一段时间了。我从来没有真正理解过的一件事是为什么他们建议从类中配置记录器名称。具体来说,我想知道:

  1. 三个记录器声明有什么区别?
  2. 哪个更好,为什么?
  3. 是否有一种方法允许复制和粘贴日志声明而无需在某处键入类的名称?为了性能,我更喜欢不使用反射的东西。

例如,考虑类MyClass。我遇到的三个声明是:

  • final Logger myLogger = LogManager.getLogger(MyClass.class.getName());

  • final Logger myLogger = LogManager.getLogger(MyClass.class);

  • final Logger myLogger = LogManager.getLogger("MyClass");

我已经阅读了文档,并且在 log4j 网站上看到了对第一种和第二种形式的引用,但我不明白它的优势是什么。

【问题讨论】:

    标签: java logging log4j log4j2


    【解决方案1】:

    回答您的每个问题:

    • 三种记录器声明有什么区别?

      基本上,您可以通过三种方式中的两种方式使用 class 类型,直接或获取名称。第三种方式是任意名称(容易出错),可以与第二种方式匹配。

    • 哪个更好,为什么?

      第二种方式。它是最短且最不容易出错的。

    • 是否有一种方法允许复制和粘贴日志声明而无需在某处键入类的名称?为了性能,我更喜欢不使用反射的东西。

      如果您使用 Eclipse,则可以使用模板。请参阅Create Log4J loggerSimple Log4J eclipse template。其他 IDE 中也有类似的设施。

    【讨论】:

    • 所以你说指定类名更好,因为 IDE 会错误检查,其中字符串只是一个字符串。
    【解决方案2】:

    使用类名作为记录器名称是一种约定,现在可能被认为是一种“最佳实践”。原因很简单——过滤。

    在 Log4j 中,您配置的 Logger 与您的应用程序获取的 logger 相匹配。因此,如果您的类可以命名记录器

    com.mycorp.package1.Class1
    com.mycorp.package1.Class2
    com.mycorp.package2.Class1
    com.mycorp.package2.Class2
    

    您可以在某个级别为“com.mycorp.package1”配置一个 Logger,并将所有这些类路由到一组附加程序,而“com.mycorp.package2”可以设置为不同的日志级别并路由到其他地方.

    Log4j2 并不真正关心这些是完全限定的类名 - 任何由 '.' 分隔的东西。字符将起作用。

    仅供参考 - LogManager.getLogger() 将返回一个使用调用类名称的 Logger。是的,它使用反射,但如果您将 Logger 声明为静态,则只需初始化一次。

    【讨论】:

      【解决方案3】:

      如果我理解了第 3 点:我通常在父类中声明一个记录器,如下所示:

      final Logger myLogger = LogManager.getLogger(getClass());
      

      因此派生类在日志中获得自己的名称,您只需声明一次记录器,而不必在每个类中都选择一个名称。

      【讨论】:

      • 这种方法似乎工作正常。我决定使用 getClass().getSimpleName()。
      【解决方案4】:

      据我了解,您可以随心所欲地调用您的记录器。为它分配类名是一种确保名称是唯一的(如果您使用完全限定名称)以及有意义的东西(因此您知道在解析日志时正在查看的内容)的方法。为此,我会避免使用静态字符串名称,这样您就可以少担心一个细节。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-26
        • 1970-01-01
        • 2014-09-21
        • 2012-02-16
        • 1970-01-01
        • 2017-11-17
        相关资源
        最近更新 更多