This blog post描述了一种有趣的日志记录方法:
When activated, if an exception (e.g. a NullPointerException) is thrown, the complete trace of the session up to that point is output, in addition to the stack trace. It works by starting session logging for every session, but only outputting the result if an exception occurs.
在任何 Java 日志框架中是否有它的实现?
最佳答案
据我所知,编写一个委托(delegate)给相应 session 日志的自定义附加程序是很有可能的。对于 Logback,这可能是这样的:
class SessionLogAppender implements Appender<ILogEvent> {
private static final TheadLocal<Object> sessionHolder = new ThreadLocal<Object>();
private Map<Object, SessionLog> sessionLogs = new ConcurrentHashMap<>();
/** must be invoked when a new session begins */
public static void begin(Object session) {
sessionHolder.set(session);
}
/** must be invoked when a session ends */
public static void end() {
Object session = sessionHolder.get();
writeIfNecessary(sessionLogs.get(session));
sessionLogs.remove(session);
sessionHolder.clear();
}
@Override
public void doAppend(ILogEvent e) {
Object session = sessionHolder.get();
SessionLog l = sessionLogs.get(session);
if (l == null) {
l = new SessionLog();
sessionLogs.put(session, l);
}
l.append(e);
}
}
这假设每个 session 都由一个专用线程处理。
关于错误跟踪日志记录的 Java 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21570965/