Logging log4j-自适应日志级别-功能

Logging log4j-自适应日志级别-功能,logging,log4j,Logging,Log4j,我不想重新发明轮子,所以我想知道是否有任何日志系统已经支持像我建议做的事情 背景: 我正在一个非常大的系统上工作,在这个系统中,成千上万的用户在任何给定的时间访问服务器。 有很多周围的基础设施,所以你可以想象一下,仅仅通过读取这样一个生态系统中的日志来调查罕见的bug会是什么样子 我们的系统使用log4j 问题的主要根源是,当遇到未知错误时,最初的实现者相当“经济”,说得委婉一点。当然,调试级别在大多数情况下都很有用,但当然,生产日志仅设置在错误级别:( 现在,我正在努力为我们的孩子创造一个更美

我不想重新发明轮子,所以我想知道是否有任何日志系统已经支持像我建议做的事情

背景: 我正在一个非常大的系统上工作,在这个系统中,成千上万的用户在任何给定的时间访问服务器。 有很多周围的基础设施,所以你可以想象一下,仅仅通过读取这样一个生态系统中的日志来调查罕见的bug会是什么样子

我们的系统使用log4j

问题的主要根源是,当遇到未知错误时,最初的实现者相当“经济”,说得委婉一点。当然,调试级别在大多数情况下都很有用,但当然,生产日志仅设置在错误级别:(

现在,我正在努力为我们的孩子创造一个更美好的世界,并希望扩展日志系统,使其在日志级别上更加“宽容”

我的想法是这样的:
由于周围的调试级别日志(错误日志之前的N个和之后的M个)可能包含重要数据,为什么不降低错误周围系统的日志级别呢

我的想法:

  • 让我们假设为系统设置了错误日志级别
  • 使用某种大小为X的滚动日志缓冲区。每个日志都会进入其中并转发到log4j
  • 当缓冲区获取错误日志时,它还可以通过以下任一方式输出N条上一条和M条下一条日志消息的上下文:
  • 人为地将日志级别提高到错误状态(当然要注意),或者
  • 只需通过注入的错误日志记录该上下文
  • 有一些问题需要解决,但总的来说是可行的

    有什么想法吗


    Cheers

    BufferingForwardingAppender可能是一个解决方案。与示例相关的文档说明“这意味着只有在记录了级别为WARN或更高级别的消息时才会传递事件。最多512(BufferSize)以前任何级别的消息也将被传递以提供上下文信息。未发送的消息将被丢弃。”

    见:

    对于繁忙的web应用程序,这可能不是最好的方法。在大多数情况下,您对与导致错误的特定会话或请求相关联的日志消息感兴趣。由于一个请求通常由单个线程处理,因此可以通过保留“每个线程”来实现日志消息的缓冲区。通过添加servlet过滤器,可以在服务器每次开始处理来自客户端的新请求时清除缓冲区


    或者更好的做法是保留每个HTTPSession的缓冲区(如果内存使用不是问题的话)。这样,您不仅可以获得导致问题的请求的调试信息,还可以获得前一个请求的调试信息(以帮助了解用户在做什么)

    抱歉,我没有意识到BufferingForwardingAppender实际上是针对log4net而不是log4j的。找不到它的Java版本,但移植.net版本可能相当容易。