我正在使用log4j进行日志记录,为了在执行时获取各个方法的类名,我得到了一些使用SecurityManager获取类名的常用方法,但我不想使用SecurityManager,是他们的任何一个在运行时获取类名的其他方法。另外,我不想编写代码(MyClass.getClassName
)来获取每个类中的类名。
class log extends SecurityManager {
public String getClassName() {
return getClassContext()[3].getName();
}
}
答案 0 :(得分:5)
静态记录器的解决方案:
private static final Logger LOG = Logger.getLogger(new Object() { }.getClass().getEnclosingClass());
答案 1 :(得分:4)
全名(包裹):
this.getClass().getName();
对于类的名称(只是类名而不是更多):
this.getClass().getSimpleName();
答案 2 :(得分:3)
您也可以通过类对象本身接收Logger
而不是接收类名:
public static Logger getLogger(Class clazz)
这就是它的用法:
private static final Logger logger = Logger.getLogger(MyClass.class);
http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/Logger.html#getLogger(java.lang.Class)
答案 3 :(得分:2)
您可以在appender配置中将%l
添加到PatternLayout以获取日志语句的调用类。
答案 4 :(得分:1)
我猜你需要调用你的日志类的类的类名吗?
试试这个:
StackTraceElement stackTraceElement = new Throwable().getStackTrace()[3];
答案 5 :(得分:0)
你也可以这样做:
private static final String CLASS_NAME = MyClass.class.getName();
log.debug(new LogRecord(CLASS_NAME," Success = "+isSuccess));