gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 15:48:00 26 4
gpt4 key购买 nike

不想重新发明轮子,所以我想知道是否有任何日志记录系统已经支持我打算做的事情。

背景:
我正在开发一个非常大的系统,在该系统中,数以万计的用户在任何给定时间访问服务器。
涉及到许多周围的基础设施,因此您可以想象仅通过阅读这样一个生态系统中的日志来调查罕见的错误会是什么样子。

我们的系统使用 log4j。

问题的主要根源是最初的实现者在遇到未知错误时相当“经济”。当然,DEBUG 级别在大多数情况下会有所帮助,但当然,生产日志仅设置为 ERROR 级别:(

现在我正在努力为我们的 child 创造一个更美好的世界,并希望扩展日志系统以对日志级别更加“宽容”。

我的想法是这样的:
既然周围的 DEBUG 级别的日志(ERROR 日志之前的 N 和之后的 M)可能包含重要数据,为什么不降低 ERROR 周围的系统日志级别。

我的想法:

  • 假设为系统设置了 ERROR 日志级别
  • 使用某种大小为 X 的翻转日志缓冲区。每个日志都进入那里并转发到 log4j。
  • 当缓冲区获得错误日志时,它还可以通过以下任一方式输出 N 前和 M 条日志消息的上下文
  • 人为地将日志级别提高到 ERROR 状态(当然要注意)或
  • 只需通过注入(inject)的错误日志
  • 记录该上下文

    有一些问题需要解决,但总的来说它可以工作。

    有任何想法吗?

    干杯

    最佳答案

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

    见:http://logging.apache.org/log4net/release/config-examples.html#buffering

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

    或者更好的是保留(如果内存使用不是问题)每个 HTTPSession 的缓冲区。通过这种方式,您实际上可以获得调试信息,不仅是导致问题的请求,还包括以前的请求(帮助弄清楚用户在做什么)

    关于logging - log4j - 自适应日志级别 - 功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5912479/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com