如何在java中使用日志级别

vin*_*nod 45 java logging

我正在开发一个应用程序,我需要使用记录器功能.我已经阅读了不同级别的记录器,它们是:

  • 严重(最高)
  • 警告
  • 信息
  • CONFIG
  • 精细
  • FINER
  • FINEST

我无法理解每个日志记录级别的用法.

有人能给我一个很好的例子来显示所有日志记录级别及其用法吗?

Tho*_*mas 56

通常,您不需要所有这些级别,严重,警告,信息,精细可能就足够了.我们正在使用Log4J(不直接是java.util.logging)和以下级别(名称可能与其他日志框架不同):

  • 错误:任何或可能是关键的错误/异常.我们的记录仪会自动发送一封电子邮件,我们的服务器上的每个这样的消息(用法: logger.error("message");)

  • 警告:当用户试图用错误的凭据登录可能会提醒我们的潜在问题,例如,任何消息-这可能表明攻击如果经常发生或短时间(用法:logger.warn("message");)

  • 信息:我们想什么要查看日志文件,例如,当知道当一个计划作业开始/结束(用法:logger.info("message");)

  • DEBUG:顾名思义,调试我们很少打开的消息.(用法:logger.debug("message");)

这样做的好处是,如果您将日志级别设置为WARN,那么信息和调试消息几乎不会对性能产生影响.如果您需要从生产系统获取其他信息,您可以在短时间内将级别降低到INFO或DEBUG(因为您将获得更多日志条目,这会使您的日志文件变得更大,更难以阅读).调整日志级别等通常可以在运行时完成(我们的JBoss实例每隔一分钟检查一次配置中的更改).

  • 问题是关于java的内置日志记录 - 而不是log4j.顺便说一句,为什么Sun没有采用log4j约定? (9认同)
  • 问题不是关于log4j. (5认同)
  • @kilaka实际上OP并不具体说明他是指`java.util.logging`还是更普遍的`登录Java`.除此之外,我谈到了我们的经验,因为在大多数情况下,不同的层次具有相似的含义,我只是告诉他我们在生产中使用什么以及在现实世界中对我们来说什么是足够的.因此,在确定7个日志级别之间没有困难,将复杂性降低到4个日志级别将有助于OP,恕我直言. (4认同)
  • @JohnDonn是的,它一般是关于日志级别的,我只是使用log4j来提供一些经验.由于log4j对日志级别使用略有不同的名称,我觉得提供这些信息以便读者可以适应.但是,一般信息保持不变,并且与所使用的实际日志记录框架无关. (2认同)

Rag*_*har 19

这段摘录来自以下精彩帖子.

错误 - 发生了一些非常严重的错误,必须立即进行调查.没有系统可以容忍此级别上记录的项目.示例:NPE,数据库不可用,关键任务用例无法继续.

警告 - 该过程可能会继续,但要格外小心.实际上我总是希望在这里有两个级别:一个用于明显的问题,其中存在解决方法(例如:"当前数据不可用,使用缓存值")和第二个(命名为:ATTENTION)潜在问题和建议.示例:"在开发模式下运行的应用程序"或"管理控制台未使用密码保护".应用程序可以容忍警告消息,但应始终对其进行验证和检查.

信息 - 重要的业务流程已经完成.在理想的世界中,管理员或高级用户应该能够理解INFO消息并快速找出应用程序正在做什么.例如,如果一个应用程序都是关于预订机票,那么每张机票应该只有一个INFO声明说"[谁]从[Where]到[Where]预订机票".INFO消息的其他定义:每个动作都会显着改变应用程序的状态(数据库更新,外部系统请求).

DEBUG - 开发人员的东西.我稍后会讨论哪些信息值得记录.

TRACE - 非常详细的信息,仅用于开发.在生产环境中部署之后,您可能会在短时间内保留跟踪消息,但将这些日志语句视为临时的,最终应该或可能会被关闭.DEBUG和TRACE之间的区别是最困难的,但是如果您在开发和测试功能之后放置了日志语句并将其删除,那么它可能应该处于TRACE级别.

PS:将TRACE读作VERBOSE


jme*_*ens 9

java.util.logging.Level中的文档中则定义时使用日志级别和日志级别的目标受众的好工作.

大多数混淆java.util.logging在于追踪方法.它应该在类级文档中,但是该Level.FINE字段提供了一个很好的概述:

FINE是提供跟踪信息的消息级别.

所有FINE,FINER和FINEST都用于相对详细的跟踪.这三个级别的确切含义在不同子系统之间会有所不同,但一般来说,FINEST应该用于最大量的详细输出,FINER用于稍微不那么详细的输出,而FINE用于最低音量(和最重要的)消息.

一般而言,FINE级别应该用于对特定子系统没有特殊兴趣的开发人员广泛感兴趣的信息.

FINE消息可能包括诸如次要(可恢复)故障之类的事情.表明潜在性能问题的问题也值得记录为FINE.

理解级别文档中未提及的一个重要事项是记录呼叫站点跟踪信息FINER.如果您记录消息,FINE则可以配置日志记录系统以查看包含或不包含日志消息的流控制日志记录的日志输出.因此,FINE仅在不需要流控制日志记录作为上下文来理解此日志跟踪消息时使用.

FINER表示相当详细的跟踪消息.默认情况下,在此级别跟踪用于输入,返回或抛出异常的日志记录调用.

一般来说,大多数使用FINER应该留给进入,退出投掷的召唤.FINER当打开详细日志记录时,这将大部分用于呼叫站点跟踪.

FINEST表示非常详细的跟踪消息.

使用FINEST时,你要写跟踪日志消息需要大约程序控制流上下文信息.您还应该使用FINEST来跟踪产生大量输出数据的消息.

CONFIG消息旨在提供各种静态配置信息,以帮助调试可能与特定配置相关联的问题.例如,CONFIG消息可能包括CPU类型,图形深度,GUI外观等.

CONFIG适用于协助系统管理员使用上面列出的项目.

通常,INFO消息将写入控制台或其等效消息.因此,INFO级别应仅用于对最终用户和系统管理员有意义的合理重要的消息.

这方面的示例是跟踪程序启动和关闭.

通常,WARNING消息应描述最终用户或系统管理员感兴趣的事件,或指示潜在问题的事件.

示例用例可以是从AutoCloseable.close实现抛出的异常.

通常,SEVERE消息应描述相当重要且阻止正常程序执行的事件.它们应该对最终用户和系统管理员有合理的理解.

例如,如果您的程序中有事务,如果其中任何一个步骤失败,那么所有步骤都将失效,那么SEVERE将适合用作日志级别.