Java 日志级别 - 何时使用啥

Posted

技术标签:

【中文标题】Java 日志级别 - 何时使用啥【英文标题】:Java log levels - When to use WhatJava 日志级别 - 何时使用什么 【发布时间】:2014-10-05 00:14:40 【问题描述】:

什么时候应该使用低于日志级别?如果有任何例子会很棒。

    跟踪与调试 警告与错误与致命

警告VS错误VS致命

首先我需要在我的应用程序代码中使用 FATAL 吗?

我从未见过 FATAL 记录到我目前从事的项目中的任何代码。

我已经读过,万一致命程序将结束。如果是这种情况,我想知道我的日志语句将如何执行。

另外,我认为在内存分配的情况下不能使用FATAL,因为JVM会抛出内存异常并退出程序。因此开发人员无法记录任何内容。如果这是正确的,那么我将在哪里使用 FATAL?

对于错误和警告: 在 catch 块中,如果我没有备用逻辑(用于错误条件)执行,我将去记录错误级别的异常,异常将转换为用户特定并显示在屏幕上。

同时,当我们有异常逻辑的备用流/路径时,将使用警告。

用于调试 这将验证抛出异常的内容和位置。什么是导致错误的数据。因此,这可以在代码的复杂逻辑之前和之后使用。

如果我的理解正确,请告诉我

示例:

class myLogLevel
     void method1( int empId) 
    
              log.trace("method1 starting") ;
           try
               log.info("befor getting data from DB");
            log.debug("executing the value for emp id : " + empId );
                      //DBConnection and code here

           catch (Exception1 e1) 
    log.warn("record not found. So assigning default value");
           // Code logic to assign default value
          
          catch (Exception1 e1) 
             // Due to DB connection error. Connection nor established
log.error("DB connection not established");
          
       log.trace("method1 ending") ;
        
       

【问题讨论】:

对此有何想法? 【参考方案1】:

在我过去的经验中,一种比较常见的做法是

始终使用 DEBUG 进行调试。我很少看到人们使用 TRACE。

对于对系统不利但不一定会导致问题的东西(即是否是错误取决于调用上下文),请使用 WARN;例如。你可以编写一个有时返回 NaN 的函数;但 NaN 可能不是调用者的错误,具体取决于您的上下文。

对于在系统某处或调用者输入数据中肯定是错误的内容;肯定需要人工参与(即需要有人从您的生产支持团队中查看),使用错误。例如。您想将一个人的记录写入数据库,但发现主键(名字,姓氏)为 NULL。

对于会导致整个系统关闭或对系统造成严重影响的内容,请使用 FATAL。这意味着人们需要立即查看它。示例包括导致启动失败的问题;内存分配失败;消息处理系统未能初始化消息层;等等。

希望以上内容有所帮助。

【讨论】:

我现在更新了我的问题。我的主要问题是何时使用 FATAL 和 Error 示例。

以上是关于Java 日志级别 - 何时使用啥的主要内容,如果未能解决你的问题,请参考以下文章

idea中log4j 的日志级别是info但是output会打印debug的日志,是啥原因

(十四)日志

android输出日志信息有啥用,既然我们可以自己设定Log的级别,那输出的级别颜色又有啥参考价值啊?

如何使用 Java 代码配置 Logback 以设置日志级别?

Java日志级别

Java日志级别