2013-10-30 289 views
0

如何在日誌文件中記錄jar文件的位置。 假設我正在打印來自myLog.jar中的LogTest.java的一些消息,有沒有什麼方法可以在日誌文件中打印如下。如何在日誌語句打印日誌中記錄日誌jar文件

INFO 2013-10-30 15:58:07,227 [log] (LogTest.java:235:myLog.jar) - Some Log Message

在傳統項目中的各種罐子含有一種類似日誌消息的具有相同的類名, 它是需要時間來調查任何問題。 有沒有辦法處理這個請給你的建議。

+0

是否將包名稱添加到日誌中以澄清它?或者多個罐子包含相同的包裝? – jalynn2

+0

包名稱和類名稱(%C.%F)我已經嘗試過,但是我想從打印日誌的位置打印jar文件。 – Azhar

回答

0

無法將源文件與標準org.apache.log4j.PatternLayout一起加入。但是,您可以創建自己的佈局以將其包含在源代碼中。以下可能有用。

public class MyLayout extends org.apache.log4j.Layout { 
    public void activateOptions() { 
     // None action 
    } 
    public String format(LoggingEvent event) { 
     StringBuilder sb = new StringBuilder(); 
     sb.append(event.getLevel()); 
     sb.append(" ("); 
     sb.append(event.getLoggerName()); 
     sb.append(":"); 
     sb.append(event.getLocationInformation().getLineNumber()); 
     sb.append(":"); 
     sb.append(getSource(event.getLoggerName())); 
     sb.append(") - "); 
     sb.append(event.getMessage()); 
     sb.append(LINE_SEP); 
     return sb.toString(); 
    } 
    public boolean ignoresThrowable() { 
     return true; 
    } 
    public static String getSource(String className) { 
     try { 
      ClassLoader loader = MyLayout.class.getClassLoader(); 
      String name = className.replace('.', '/').concat(".class"); 
      URL url = loader.getResource(name); 
      return url.getPath(); 
     } catch (Exception e) { 
      return null; 
     } 
    } 
} 
+0

我能夠使用格式記錄語句,但它從MyLayout.java打印日誌位置,而不是從記錄語句的位置打印日誌位置。假設我在Test.java的第6行打印日誌,但我仍將Logger打印爲INFO(smsg.common.util.logger.MyLayout:227:/ C:/ Users/Myusr/workspace1/my-eclipse-prj /target/classes/smsg/common/util/logger/MyLayout.class) - Helllo寧可打印Test.java和行號。 – Azhar