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




logback配置 (7)

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

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

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

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


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

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

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

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

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

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


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


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

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


以下是对Java登录的一个很好的介绍: http://www.javapractices.com/topic/TopicAction.do?Id=143http://www.javapractices.com/topic/TopicAction.do?Id=143 Id= http://www.javapractices.com/topic/TopicAction.do?Id=143

Java附带了一个日志API,因为它是1.4.2版本: http://download.oracle.com/javase/1.4.2/docs/guide/util/logging/overview.htmlhttp://download.oracle.com/javase/1.4.2/docs/guide/util/logging/overview.html

您还可以使用其他日志框架,例如最受欢迎的Apache Log4j: http://logging.apache.org/log4jhttp://logging.apache.org/log4j

我建议您使用日志抽象框架,它允许您更改日志框架而无需重新分解代码。 因此,您可以使用Jul(Java Util Logging)开始,然后在不更改代码的情况下切换到Log4j。 最受欢迎的日志门面是slf4j: http://www.slf4j.org/ ://www.slf4j.org/

问候,


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

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

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

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

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

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

PS:阅读TRACE作为VERBOSE


这篇技巧文章展示了如何在任何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


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





logging