Java log4j-配置记录器名称
我已经用了一段时间了。有一件事我从未真正理解,那就是为什么他们建议从类中配置记录器名称。具体而言,我想知道:Java log4j-配置记录器名称,java,logging,log4j,log4j2,Java,Logging,Log4j,Log4j2,我已经用了一段时间了。有一件事我从未真正理解,那就是为什么他们建议从类中配置记录器名称。具体而言,我想知道: 三种记录器声明的区别是什么 哪一个更好,为什么 是否有一种方法允许复制和粘贴日志声明,而不必在某处键入类的名称?出于性能考虑,我更喜欢不使用反射的东西 例如,考虑类 MyClass < /代码>。我遇到的三个声明是: final Logger myLogger=LogManager.getLogger(MyClass.class.getName()) final Logger myLo
例如,考虑类<代码> MyClass < /代码>。我遇到的三个声明是:
final Logger myLogger=LogManager.getLogger(MyClass.class.getName())代码>
final Logger myLogger=LogManager.getLogger(MyClass.class)代码>
final Logger myLogger=LogManager.getLogger(“MyClass”)代码>
我已经阅读了文档,在log4j站点上看到了第一个和第二个表单的引用,但我不明白它的优点是什么。我的理解是,您可以随意调用日志记录器。为其指定类名是一种确保名称唯一(如果使用完全限定名)以及有意义的方法(这样您就知道在解析日志时会看到什么)。为此,我不使用静态字符串名称,只是为了让您少担心一个细节 据我所知,您可以随意调用日志记录器。为其指定类名是一种确保名称唯一(如果使用完全限定名)以及有意义的方法(这样您就知道在解析日志时会看到什么)。为此,我不使用静态字符串名称,只是为了让您少担心一个细节 如果我理解了第3点:我通常在父类中声明一个记录器,如下所示:
final Logger myLogger = LogManager.getLogger(getClass());
因此,派生类在日志中有自己的名称,您只需声明一次记录器,并且不必在每个类中选择名称。如果我理解第3点:我通常在父类中声明记录器,如下所示:
final Logger myLogger = LogManager.getLogger(getClass());
因此,派生类在日志中有自己的名称,您只需声明一次记录器,并且不会强制您在每个类中选择名称。在回答您的每个问题时:
- 三种记录器声明的区别是什么 基本上,使用类的三种方法中的两种是直接使用或获取名称。第三种方法是一个可以与第二种方法匹配的任意名称(容易出错)
- 哪一个更好,为什么 第二条路。它是最短、最不容易出错的
- 是否有一种方法允许复制和粘贴日志声明,而不必在某处键入类的名称?出于性能考虑,我更喜欢不使用反射的东西 如果使用Eclipse,则可以使用模板。看到或看到。其他IDE中也存在类似的功能
- 三种记录器声明的区别是什么 基本上,使用类的三种方法中的两种是直接使用或获取名称。第三种方法是一个可以与第二种方法匹配的任意名称(容易出错)
- 哪一个更好,为什么 第二条路。它是最短、最不容易出错的
- 是否有一种方法允许复制和粘贴日志声明,而不必在某处键入类的名称?出于性能考虑,我更喜欢不使用反射的东西 如果使用Eclipse,则可以使用模板。看到或看到。其他IDE中也存在类似的功能
com.mycorp.package1.Class1
com.mycorp.package1.Class2
com.mycorp.package2.Class1
com.mycorp.package2.Class2
您可以在某个级别为“com.mycorp.package1”配置记录器,并将所有这些类路由到一组附加器,而“com.mycorp.package2”可以设置为不同的日志级别并路由到其他地方
Log4j2并不真正关心这些是完全限定的类名——任何以“.”字符分隔的名称都可以
FYI-LogManager.getLogger()将返回一个使用调用类名称的记录器。是的,它使用反射,但如果您将记录器声明为静态,则只需初始化一次。使用类名作为记录器名称是一种惯例,目前可能被认为是一种“最佳实践”。原因很简单——过滤 在Log4j中,配置的记录器与应用程序获得的记录器匹配。所以,如果你有一个类可以命名为logger
com.mycorp.package1.Class1
com.mycorp.package1.Class2
com.mycorp.package2.Class1
com.mycorp.package2.Class2
您可以在某个级别为“com.mycorp.package1”配置记录器,并将所有这些类路由到一组附加器,而“com.mycorp.package2”可以设置为不同的日志级别并路由到其他地方
Log4j2并不真正关心这些是完全限定的类名——任何以“.”字符分隔的名称都可以
FYI-LogManager.getLogger()将返回一个使用调用类名称的记录器。是的,它使用反射,但如果您将记录器声明为静态,则只需初始化一次。您的意思是指定类名更好,因为IDE会错误检查,其中字符串只是字符串。您的意思是指定类名更好,因为IDE会错误检查,一个字符串就是一个字符串。这种方法似乎很有效。我决定使用getClass().getSimpleName()。这种方法似乎很好用。我决定使用getClass().getSimpleName()。