`
FengShen_Xia
  • 浏览: 273165 次
  • 性别: Icon_minigender_1
  • 来自: 东方水城
社区版块
存档分类
最新评论

日志级别的选择:Debug、Info、Warn、Error还是Fatal

    博客分类:
  • Web
阅读更多

        软件中总免不了要使用诸如 Log4net, Log4j, Tracer 等东东来写日志,不管用什么,这些东东大多是大同小异的,一般都提供了这样5个日志级别:
    × Debug
    × Info
    × Warn
    × Error
    × Fatal
        一个等级比一个高,但是在具体开发中,关于应该如何选择适应的等级,却没有找到好的文章进行说明。记录一下自己的一些看法,以便日后使用吧。

=== Debug ===
        这个级别最低的东东,一般的来说,在系统实际运行过程中,一般都是不输出的。


        因此这个级别的信息,可以随意的使用,任何觉得有利于在调试时更详细的了解系统运行状态的东东,比如变量的值等等,都输出来看看也无妨。


        当然,在每一个 Debug 调用之前,一定要加上 If 判断。

=== Info ===
        这个应该用来反馈系统的当前状态给最终用户的,所以,在这里输出的信息,应该对最终用户具有实际意义,也就是最终用户要能够看得明白是什么意思才行。


        从某种角度上说,Info 输出的信息可以看作是软件产品的一部分(就像那些交互界面上的文字一样),所以需要谨慎对待,不可随便。

=== Warn、Error、Fatal ===
        警告、错误、严重错误,这三者应该都在系统运行时检测到了一个不正常的状态,他们之间的区别,要区分还真不是那么简单的事情。我大致是这样区分的:


        所谓警告,应该是这个时候进行一些修复性的工作,应该还可以把系统恢复到正常状态中来,系统应该可以继续运行下去。


        所谓错误,就是说可以进行一些修复性的工作,但无法确定系统会正常的工作下去,系统在以后的某个阶段,很可能会因为当前的这个问题,导致一个无法修复的错误(例如宕机),但也可能一直工作到停止也不出现严重问题。

        所谓Fatal,那就是相当严重的了,可以肯定这种错误已经无法修复,并且如果系统继续运行下去的话,可以肯定必然会越来越乱。这时候采取的最好的措施不是试图将系统状态恢复到正常,而是尽可能地保留系统有效数据并停止运行。

        也就是说,选择 Warn、Error、Fatal 中的具体哪一个,是根据当前的这个问题对以后可能产生的影响而定的,如果对以后基本没什么影响,则警告之,如果肯定是以后要出严重问题的了,则Fatal之,拿不准会怎么样,则 Error 之。

=== 一些疑惑 ===
        不过在实际使用中,基于上面的这种考虑,也还是有一些具体问题。最常见的就是要在最终产品中将输出日志打开到那种级别才算好呢?


        例如在应用中有一个输出窗口,一些系统状态信息将被输出到这个输出窗口中。因为 Info 的级别是如此之低,所以为了让用户能够看到有效的输出信息,必须将日志级别开放到 Info 级别。但是 Warn 的级别比 Info 要高,所以用户不得不被迫看到一些 Warn 的信息。而我们其实已经假定,Warn 信息其实并不影响系统的正常运行,这一般只代表系统中存在一些还没有被发现或者修改的小 Bug。这些 Warn 信息会让最终用户困惑甚至恐慌,系统发出警告了,该怎么办?

        个人观点,Info 的级别应该比 Warn 更高才对,Warn 信息和 Debug 一样,应该在产品测试和调试时使用,而 Info、Erro 以及 Fatal 则在产品发布后需要继续使用。

        目前我所采用的解决方法是,对于 Warn、Error、Fatal 都添加一个相应的系统断言,这样,可以保证当发生这种问题时,在调试阶段,可以立即得到提示。在软件发布以后,这些信息也能被记录到日志文件中去。

        

log.Warn("message");
System.Diagnostics.Debug.Fail("警告", "message");

 
        Debug.Fail 将导致编译为 Debug 输出时,会弹出一个消息警告窗口,这可保证在测试、调试阶段不漏过任何一个潜在的错误。而在发布时,Release 编译的输出不会包括 Debug 语句,这就不会打扰最终用户,而错误信息仍然能通过 log 记录到日志中。

分享到:
评论

相关推荐

    .Net轻量级简单日志组件

    日志组件位于System.Database.dll中,项目引用命名空间(System.Logger)即可,日志组件提供五种级别的日志记录(DEBUG|INFO|WARN|ERROR|FATAL),最低DEBUG,最高FATAL,当配置的级别大于等于对应级别时,会自动记录...

    .Net轻量级日志组件

    日志组件位于System.Database.dll中,项目引用命名空间(System.Logger)即可,日志组件提供五种级别的日志记录(DEBUG|INFO|WARN|ERROR|FATAL),最低DEBUG,最高FATAL,当配置的级别大于等于对应级别时,会自动记录...

    axe:日志记录附件,用于通过HTTP将日志发送到Node and Browser环境中的服务器。 适用于任何记录器! 始终切碎您的日志! 专为客舱和小伙子

    这意味着您可以使用任何(或默认console ),但是我们严格支持以下日志级别: trace debug info warn error fatal (使用error ) 我们强烈建议您在记录(message, meta)时遵循此方法: const message = 'Hell

    logger日志

    分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者您定义的级别。Log4j建议只使用四个级别,优先级从高到低分别是 ERROR、WARN、INFO、DEBUG。通过在这里定义的级别,您可以控制到应用程序中相应级别的日志信息的...

    打印日志等异常处理,使用Log4j的配置

    配置根日志:级别:debug<info<warn<error<fatal #如果一条日志信息的级别大于等于配置文件的级别,就记录配置输出源所对应的辅助类:log4j.appender.输出源名称=类名,如果输出到文件就写FileAppender #指定文件名 ...

    log4j日志等级

    log4j 日志 等级 级别顺序(低到高): DEBUG < INFO < WARN < ERROR < FATAL

    log4j-core.jar的日志核心包

    1.日志级别:log4j-core.jar支持多种日志级别,包括TRACE、DEBUG、INFO、WARN、ERROR和FATAL。开发人员可以根据需要选择适当的日志级别,以记录不同类型的日志信息。 2.日志输出:log4j-core.jar支持多种日志输出...

    golang日志处理库go-logger.zip

    打印日志有5个方法 Debug,Info,Warn, Error ,Fatal 日志级别由低到高设置日志级别的方法为:logger.SetLevel() 如:logger.SetLevel(logger.WARN)则:logger.Debug(....),logger.Info(...) 日志不会打出,而 ...

    Log4j入门和实例

    logrj.logger.helloappLogger=WARN 以上代码定义了一个Logger组件,名为helloappLogger,并为它分配了一个日志级别WARN,(一共有5种日志级别:FATAL,ERROR,WARN,INFO,DEBUG) 它的日志级别为WARN,在程序口,它的...

    Log4j日志管理系统简单使用说明

    这五个级别是有顺序的,DEBUG < INFO < WARN < ERROR < FATAL,明白这一点很重要,这里Log4j有一个规则:假设Loggers级别为P,如果在Loggers中发生了一个级别Q比P高,则可以启动,否则屏蔽掉。    Java程序举例来...

    Log4Net使用演示C#源码.rar

    log4net是一个功能著名的开源日志记录组件。...并且我们还可以记载控制要记载的日志级别,可以记载的日志类别包括:FATAL(致命错误)、ERROR(一般错误)、WARN(警告)、INFO(一般信息)、DEBUG(调试信息)。

    log4j-1.2.9

    设置log4j的根目录,值为 日志等级(DEBUG,INFO,WARN,ERROR,FATAL) , 输出目标名称 log4j.rootLogger=DEBUG,A1 设置输出方式,常用的有: ConsoleAppender 在控制器中输出信息 RollingFileApperder 在文件中输出...

    深入学习log4j

    log的级别从低到高依次为TRACE,DEBUG,INFO,WARN,ERROR and FATAL。假设定义某个类的log级别为INFO,则INFO以下级别的log,TRACE和DEBUG将不会输出。示例代码如下(运行时注意类名和包结构): package ...

    LogControl.rar

    1. 日志信息分级:FATAL(致命错误)、ERROR(一般错误)、WARN(警告)、INFO(一般信息)、DEBUG(调试信息) 2. 记录日志信息支持记录到文件、控制台、数据库(要求能支持多种数据库,比如 MSSQL MySQL SQLite...

    debug-level:水平调试

    调试级别 水平调试 ...debug-level提供了7个日志级别,分别是TRACE , DEBUG , INFO , WARN , ERROR , FATAL和OFF 。 每个电平具有相应的方法DEBUG - > log.debug ... FATAL - > log.fatal其将被用

    Log4net dll下载

    并且我们还可以记载控制要记载的日志级别,可以记载的日志类别包括:FATAL(致命错误)、ERROR(一般错误)、WARN(警告)、INFO(一般信息)、DEBUG(调试信息)。要想获取最新版本的log4net组件库,可以到官方网站...

    高性能C 通用日志组件VC-Logger.zip

    支持 DEBUG/TRACE/INFO/WARN/ERROR/FATAL 等多个日志级别 可用性: 本日志组件着重考虑了可用性,尽量让使用者用起来觉得简便、舒心: 简单纯净:不依赖任何程序库或框架 使用...

    NESLoggerDemo:基于宏定义编写的日志工具,参照了java的log4j进行了日志级别设置,可以根据debug和release编译不同的日志级别. 包含了3个输出目标

    基于宏定义编写的日志工具,参照了java的log4j进行了日志级别设置,可以根据debug和release编译不同的日志级别. 包含了3个输出目标:控制台,文件和UIAlertController 加入了快捷的日志上传和清理方法,减少日志文件占用...

    log4cplus 源码(C++编写的开源的日志系统)

    Priorities :优先权,包括TRACE, DEBUG, INFO, WARNING, ERROR, FATAL。 本文介绍了log4cplus基本概念,以及如何安装,配置,下一篇将通过例子介绍如何使用log4cplus。 (二) 本文介绍了使用log4cplus有六个步骤...

    log4j-1.2.14

    设置log4j的根目录,值为 日志等级(DEBUG,INFO,WARN,ERROR,FATAL) , 输出目标名称 log4j.rootLogger=DEBUG,A1 设置输出方式,常用的有: ConsoleAppender 在控制器中输出信息 RollingFileApperder 在文件中输出...

Global site tag (gtag.js) - Google Analytics