代码之家  ›  专栏  ›  技术社区  ›  Omar Kooheji

按上下文记录消息的子集

  •  1
  • Omar Kooheji  · 技术社区  · 15 年前

    我工作的应用程序做了很多事情,在查看日志时,我发现很难解析日志。尤其是在调试/测试特定代码时。不得不费力翻阅一页又一页不相关的日志数据。

    是否有一种合理的方法来管理日志记录(主要是Java,但也对.Net感兴趣),它允许我在处理特定功能时只提交一个子集,但允许我在其他时间记录所有内容。

    我考虑过对我感兴趣的日志语句进行标记并对它们进行grepping,或者将logger库(log4j/log4net)包装到一个类中,该类允许我指定我感兴趣的上下文,并且只提交它。

    有没有标准的方法可以做到这一点?

    例如,目前我对每秒运行一次的几个计划任务的输出不感兴趣,对围绕我的中间层类的两个层的输出也不感兴趣。但我对它的输出感兴趣。

    1 回复  |  直到 15 年前
        1
  •  3
  •   Vinay Sajip    15 年前

    在使用log4j/log4net时,控制应用程序不同部分的冗长性的关键是恰当地命名记录器。通常情况下,约定是将它们命名为与其相关的完全限定类名,但可以使用任意名称。记录器名称只是一个层次化的虚线名称空间,作为开发人员,您可以根据自己的需要进行定义。

    一旦定义了应用程序中的区域(名称空间层次结构中的每个节点都是一个“区域”),那么就可以为每个区域配置详细信息,并为您关注的区域获取非常详细的调试级别消息,同时只允许通过其他区域发出的错误级别消息。

    您对感兴趣的上下文没有说太多,但是在log4j和log4net中,您可以定义添加到 LoggingEvent 实例。您可以使用现有的过滤器类或创建定制的过滤器类,这些过滤器类允许事件通过或不通过它们的属性。然后在log4j/log4net配置中配置过滤器,然后应该能够非常具体地了解从应用程序的特定区域输出的日志信息。

    注意:要在log4j中使用过滤器,必须使用XML,而不是。用于配置的属性文件。