Java 使用getSimpleName()vs getName()获取记录器
我见过使用Java 使用getSimpleName()vs getName()获取记录器,java,logging,log4j,Java,Logging,Log4j,我见过使用log4j的代码,它使用 static public Logger getLogger(String name) 及 前者使用getSimpleName()显式传递api,而后者对传递的类使用getName()。这两者之间有区别吗?如果我将不同的包配置为在log4j.properties文件中的不同级别进行日志记录,会不会产生影响?如果在不同的包中有许多类具有相同的simpleName,您可能会感到困惑。拥有许多同名的伐木工人不应该是个问题,否则可能会令人困惑。是的,这是一个巨大的差
log4j
的代码,它使用
static public Logger getLogger(String name)
及
前者使用
getSimpleName()
显式传递api,而后者对传递的类使用getName()
。这两者之间有区别吗?如果我将不同的包配置为在log4j.properties文件中的不同级别进行日志记录,会不会产生影响?如果在不同的包中有许多类具有相同的simpleName
,您可能会感到困惑。拥有许多同名的伐木工人不应该是个问题,否则可能会令人困惑。是的,这是一个巨大的差异
我从不将simpleName
用于Logger
实例,因为它会去除包名。
除了在两个不同的包中存在相同的类名时出现问题(导致两个类都获得相同的记录器实例)之外,您还失去了控制记录器继承的能力
e、 g.对于两名伐木工人:
com.foo.A
com.foo.B
在properties中,我可以只拥有:
log4j.logger.com.foo=DEBUG,CONSOLE
我更喜欢使用全名(Class.getName())。当包被正确组织时,这允许调优log4j处理来自java包树不同部分的不同日志消息
例如,您可以轻松地将以“com.mycompany.infra”开头的包中的所有类配置为使用特定的appender,并只记录级别为WARN或更高的消息。例如,我的类ShapeDemo.java驻留在com.test包中,我编写了如下代码
System.out.println("Name-->"+ShapeDemo.class.getName());
System.out.println("SimpleName-->"+ShapeDemo.class.getSimpleName());
这将输出以下内容
Name-->com.test.ShapeDemo
SimpleName-->ShapeDemo
使用this.getClass().getName()
返回:alin.iwin.flickrbrowser.GetRawData
同时
私有字符串LOG_TAG=this.getClass().getSimpleName()
仅返回:GetRawData。已在上述文章中介绍过
Name-->com.test.ShapeDemo
SimpleName-->ShapeDemo