我见过使用log4j
的代码,使用
logger
获取Logger
static public Logger getLogger(String name)
和
static public Logger getLogger(Class clazz)
前api明确传递getSimpleName()
,而后者在传递的getName()
上使用Class
。这两者有区别吗?如果我将各种包配置为在log4j.properties文件中的不同级别进行日志记录会影响吗?
答案 0 :(得分:23)
是的,存在巨大差异。
我从未对simpleName
实例使用Logger
,因为它会删除包名称。
除了在两个不同的包中存在相同的类名(导致两个类获得相同的记录器实例)时出现问题,您将失去控制记录器继承的能力。
e.g。对于两个记录器:
com.foo.A
com.foo.B
在属性中,我可以拥有:
log4j.logger.com.foo=DEBUG,CONSOLE
答案 1 :(得分:17)
E.g。我的类ShapeDemo.java驻留在com.test包中,我编写了如下代码。
System.out.println("Name-->"+ShapeDemo.class.getName());
System.out.println("SimpleName-->"+ShapeDemo.class.getSimpleName());
这将输出以下
Name-->com.test.ShapeDemo
SimpleName-->ShapeDemo
答案 2 :(得分:5)
我更喜欢使用全名(Class.getName())。正确组织包时,这允许调整log4j以处理源自java包树的不同部分的不同日志消息。
例如,您可以轻松配置以“com.mycompany.infra”开头的包中的所有类以使用特定的appender,并仅记录级别为WARN或更高级别的消息。
答案 3 :(得分:4)
使用this.getClass()。getName();
返回:alin.iwin.flickrbrowser.GetRawData
同时
private String LOG_TAG = this.getClass()。getSimpleName();
仅返回:GetRawData。
答案 4 :(得分:2)
如果您在不同的包中有许多具有相同simpleName
的类,您可能会感到困惑。有许多具有相同名称的记录器应该不是问题 - 否则可能会令人困惑。