2014-04-14 27 views
0

我在調用類的日誌類名稱時遇到問題。我有用logback寫的日誌實用程序類。出於某些性能原因,我使用單例模式創建了記錄器實用程序。但是當我從其他類調用日誌語句時,我得到的是打印實用程序的類名而不是調用類。使用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); 

     } 
} 

Test類是像

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] - 否 Person's data-100001

回答

0

您可以使用Thread.currentThread().getStackTrace()訪問當前的調用堆棧。它返回一個StackTraceElement數組。第一項始終代表getStackTrace()。第二個是調用它的方法,第三個是你想要的方法

Thread.currentThread().getStackTrace()[2].getClassName() 

返回調用方法的類的類名。