2013-10-30 196 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