如何在日志文件中记录 jar 文件位置。假设我正在从 myLog.jar 中的 LogTest.java 打印一些消息,有什么方法可以在日志文件中打印,如下所示。
INFO 2013-10-30 15:58:07,227 [log] (LogTest.java:235:myLog.jar) - Some Log Message
遗留项目中的各种 jar 包含具有相同类名的类似日志消息,调查任何问题都需要时间。有什么办法可以解决这个问题,请提出您的建议。
没有选项可以将源文件包含在标准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;
}
}
}