0

如何在日志文件中记录 jar 文件位置。假设我正在从 myLog.jar 中的 LogTest.java 打印一些消息,有什么方法可以在日志文件中打印,如下所示。

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

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

4

1 回答 1

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;
        }
    }
}
于 2013-10-30T23:22:30.167 回答