而不是在每个类上指定类名:
log = Logger.getLogger(Foo.class);
log = Logger.getLogger(Bar.class);
log = Logger.getLogger(Test.class);
Run Code Online (Sandbox Code Playgroud)
可以使用:
log = Logger.getLogger(this.getClass());
Run Code Online (Sandbox Code Playgroud)
会有什么影响?
mat*_*tts 19
如果创建子类,日志消息将记录到子类的记录器中.
package pkgone;
public class SuperType {
private Logger log = Logger.getLogger(this.getClass());
public void someAction() {
log.info("Doing something");
}
}
Run Code Online (Sandbox Code Playgroud)
.
package pkgtwo;
import pkgone.SuperType;
public class SubType extends SuperType {
// for instances of SubType, the log object in SuperType
// will get initialized with SubType's class object
}
Run Code Online (Sandbox Code Playgroud)
.
// some code somewhere that uses SubType
SubType obj = new SubType();
obj.someAction();
Run Code Online (Sandbox Code Playgroud)
在上面的示例中,"执行某些操作"将记录到pkgtwo.SubType记录器而不是pkgone.SuperType记录器,这可能是您想要的,也可能不是.
dav*_*ain 12
尝试这种方式查找泛型类...
private static final Log LOGGER = Logger.getLogger(MethodHandles.lookup().lookupClass());
Run Code Online (Sandbox Code Playgroud)
最好的部分是静态使用此方法.
如果你不想重复使logger,并希望避免写一个错误的类名,有@Log的项目龙目岛.
如果您不介意在项目中再使用一个库,则只需添加一个带有简单注释的记录器即可.
import lombok.extern.java.Log;
import lombok.extern.slf4j.Slf4j;
@Log
public class LogExample {
public static void main(String... args) {
log.error("Something's wrong here");
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15651 次 |
| 最近记录: |