logback配置 - 如何在java中使用日志级别




logback日志对齐 (6)

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

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

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

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


java.util.logging.Level文档很好地定义了何时使用日志级别以及该日志级别的目标受众。

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

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

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

通常,FINE级别应该用于对特定子系统没有特殊兴趣的开发人员广泛感兴趣的信息。

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

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

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

一般来说,大多数使用FINER应留给enteringexitingthrowing召唤。 当打开详细日志记录时,大部分会为呼叫站点跟踪保留FINER

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

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

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

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

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

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

一般而言, WARNING消息应描述最终用户或系统管理员感兴趣的事件,或表明潜在问题的事件。

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

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

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


不同的日志级别对于工具有用,它们可以为您提供日志文件。 通常,日志文件包含大量信息。 为避免信息过载(或此处为 ^^),您可以使用日志级别对信息进行分组。


水平的使用真的很重要。 您需要确定应用程序中的严重程度,警告是什么以及信息是什么。 您需要拆分日志记录,以便您的用户可以轻松设置一个日志级别,该日志级别不会因超出IO而导致系统崩溃,但会报告严重错误,以便您可以修复它们。


这些是关卡。 您将考虑要记录的消息的严重性,并使用适当的级别。

它基本上是一个水印; 级别越高,您希望在日志条目中保留信息的可能性就越大。 FINEST将用于非常不重要的消息,因此您可以将它用于您通常不关心但在某些罕见情况下可能想要查看的内容。


这篇技巧文章展示了如何在任何Java应用程序中使用Logger。 Logger需要配置Formatter和Handler。 存在许多类型的处理程序和格式化程序。 在此示例中,FileHandler用于将所有日志消息存储在日志文件中。 简单格式化程序用于以人类可读的形式格式化日志消息。

package MyProject;

import java.io.IOException;
import java.util.logging.FileHandler;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.logging.SimpleFormatter;

public class MyLogger {

  public static void main(String[] args) {

    Logger logger = Logger.getLogger("MyLog");
    FileHandler fh;

    try {

      // This block configure the logger with handler and formatter
      fh = new FileHandler("c:\\MyLogFile.log", true);
      logger.addHandler(fh);
      logger.setLevel(Level.ALL);
      SimpleFormatter formatter = new SimpleFormatter();
      fh.setFormatter(formatter);

      // the following statement is used to log any messages   
      logger.log(Level.WARNING,"My first log");

    } catch (SecurityException e) {
      e.printStackTrace();
    } catch (IOException e) {
      e.printStackTrace();
    }

  }

}

您可以在此处找到更多示例https://docs.oracle.com/javase/7/docs/api/java/util/logging/Logger.html


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

  • 错误:任何或可能是关键的错误/异常。 我们的Logger会自动在我们的服务器上发送每封此类消息的电子邮件(用法: logger.error("message");

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

  • 信息:查看日志文件时我们想知道的任何事情,例如当预定作业开始/结束时(用法: logger.info("message");

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

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





logging