错误跟踪日志记录的 Java 实现

标签 java logging slf4j

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/

相关文章:

Gradle 5 的 gradle-api uber-jar 将不需要的 slf4j 绑定(bind)放在我们的类路径上,导致运行时错误

java - Tomcat 无法实例化 org.apache.log4j.varia.LevelMatchFilter 类

python - 如何用Python3中的logging包把自己的日志文件放到正确的地方?

ruby:无法将记录器与 rspec 一起使用

java - 尝试初始化 Spring 时出现 AbstractMethodError

Spring Integration 日志记录错误 channel (slf4j + logback)

java - 为什么这个 Java lambda 表达式参数有错误?

c# - 从 C# 到 Java

java - 在 JUnit 中比较两个 Hibernate session 是否相同

java - 出现错误考虑在配置中定义类型为 'org.springframework.jdbc.core.JdbcTemplate' 的 bean