日志jar文件如何在日志中打印Log语句

时间:2013-10-30 14:20:17

标签: java logging log4j

如何在日志文件中记录jar文件位置。 假设我正在从myLog.jar中的LogTest.java打印一些消息,有没有办法在日志文件中打印如下。

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

遗留项目中的各种jar包含具有相同类名的类似日志消息, 调查任何问题都需要时间。 有没有办法解决这个问题,请提出你的建议。

1 个答案:

答案 0 :(得分: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;
        }
    }
}