kur*_*der 18 java logging log4j
我见过使用过的代码log4j,它logger是为给定的Logger使用而获取的
static public Logger getLogger(String name)
Run Code Online (Sandbox Code Playgroud)
和
static public Logger getLogger(Class clazz)
Run Code Online (Sandbox Code Playgroud)
与前api明确传递getSimpleName(),而后者使用getName()传递Class.这两者有区别吗?如果我将各种包配置为在log4j.properties文件中的不同级别进行日志记录会影响吗?
kda*_*bir 23
是的,有很大的不同.
我从来没有使用simpleName的Logger,因为它剥离下来的包名实例.除了在两个不同的包中存在相同的类名(导致两个类获得相同的记录器实例)时出现问题,您将失去控制记录器继承的能力.
例如,对于两个记录器:
com.foo.A
com.foo.B
Run Code Online (Sandbox Code Playgroud)
在属性中,我可以拥有:
log4j.logger.com.foo=DEBUG,CONSOLE
Run Code Online (Sandbox Code Playgroud)
小智 17
例如,我的类ShapeDemo.java驻留在com.test包中,我编写了如下代码.
System.out.println("Name-->"+ShapeDemo.class.getName());
System.out.println("SimpleName-->"+ShapeDemo.class.getSimpleName());
Run Code Online (Sandbox Code Playgroud)
这将输出以下内容
Name-->com.test.ShapeDemo
SimpleName-->ShapeDemo
Run Code Online (Sandbox Code Playgroud)
我更喜欢使用全名(Class.getName()).正确组织包时,这允许调整log4j以处理源自java包树的不同部分的不同日志消息.
例如,您可以轻松配置以"com.mycompany.infra"开头的包中的所有类以使用特定的appender,并仅记录级别为WARN或更高级别的消息.
小智 5
使用 this.getClass().getName();
返回:alin.iwin.flickrbrowser.GetRawData
同时
私人字符串LOG_TAG = this.getClass().getSimpleName();
仅返回:GetRawData。
| 归档时间: |
|
| 查看次数: |
31354 次 |
| 最近记录: |