我在记录调用类的类名时遇到问题。我有以logback编写的日志实用程序类。出于某些性能原因,我使用单例模式创建了记录器实用程序。但是当我从其他类调用日志语句时,我得到打印实用程序的类名而不是调用类。
private static LogUtil logutil =null;
public static LogUtil getInstance(){
if(logutil==null){
logutil = new LogUtil();
}
return logutil;
}
protected static final Logger LOGGER = (Logger)LoggerFactory.getLogger("MyModule");
public void info(String Message){
if(LOGGER.isInfoEnabled()){
LOGGER.info(Message);
}
}
测试类就像
public class LogUtilTest {
public static void testforlogging(){
logutil.info(“Im Logging this message”);
}
}
我的输出如下打印LogUtil
而不是LogUtilTest
,我需要帮助记录我的调用类名称
2014-04-14 16:47:21 INFO [main] MyModule [LogUtil.info:42]班级名称 [com.commonutil.logging.LogUtil] - 方法[testforlogging] - 否 人的数据-1001
答案 0 :(得分:0)
您可以使用Thread.currentThread().getStackTrace()
访问当前的callstack。它返回一个StackTraceElement
数组。第一项始终代表getStackTrace()
。第二个是调用它的方法,第三个是你想要的方法
Thread.currentThread().getStackTrace()[2].getClassName()
返回调用该方法的类的类名。