日志级别 debug info warn eirror fatal

软件中总免不了要使用诸如 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 都添加一个相应的系统断言,这样,可以保证当发生这种问题时,在调试阶段,可以立即得到提示。在软件发布以后,这些信息也能被记录到日志文件中去。

日志级别 debug info warn eirror fatal相关推荐

  1. Go 学习笔记(54)— Go 第三方库之 uber-go/zap/lumberjack(记录日志到文件、支持自动分割日志、支持日志级别、打印调用文件、函数和行号)

    1. 简要说明 zap 是 uber 开源的 Go 高性能日志库,支持不同的日志级别, 能够打印基本信息等,但不支持日志的分割,这里我们可以使用 lumberjack 也是 zap 官方推荐用于日志分 ...

  2. java log4j基本配置及日志级别配置详解,java基础面试笔试题

    我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家. 扫描二维码或搜索下图红色VX号,加VX好友,拉你进[程序员面试学习交流群]免费领取.也欢迎各位一起 ...

  3. Log4Net 配置日志按日期和日志级别分类写入

    配置效果图: 配置代码: 1 <?xml version="1.0" encoding="utf-8" ?> 2 <log4net> 3 ...

  4. log4 日志级别使用

    1.日志的级别: 我们现在要调用logger的方法,不过在这个Logger对象中,有很多方法,所以要先了解log4j的日志级别,log4j规定了默认的几个级别:trace<debug<in ...

  5. Log4j日志级别及使用规范

    目录 1.日志存储 2.日志工具的选择 3.日志输出级别 4.Log4j配置 5.什么时候应该打日志 6.日志API规范 6.1.Log4j.slf4j对象的声明和初始化,仅以下代码是符合规范的 6. ...

  6. Java中的日志级别

    昨天校招面试被问到了Java中的日志等级,当时也慌的一批,只说出了其中的三个,在这里细心为大家总结一下. java中⽇志级别有7 个级别:  severe.Warning.info.config.fi ...

  7. log4j对象改变日志级别

    log4j对象改变日志级别可批量的改变所有级别,或是根据条件改变日志级别. log4j配置文件: log4j.rootLogger=ERROR,FILE,CONSOLE,EXECPTION #log4 ...

  8. log4j设置日志级别

    前几天写了一个ifm_tt_sheet项目,从IFM向铁塔那边发送故障单,可是weblogic自带的jar包webservice中的某个包和我导入的jar包saaj.jar包路径内容完全一致,导致ax ...

  9. python logging模块默认日志级别_Python 日志模块logging

    logging模块: logging是一个日志记录模块,可以记录我们日常的操作. logging日志文件写入默认是gbk编码格式的,所以在查看时需要使用gbk的解码方式打开. logging日志等级: ...

最新文章

  1. 迈向成功的关键在于执行(摘自李开复博士的《做最好的自己》)
  2. iis开启php验证码,php结合GD库实现中文验证码的简单方法
  3. C语言,椰果数量问题,计算最少的椰果数
  4. react 组件添加样式_如何通过4个简单的步骤将CSS模块样式表添加到React组件
  5. 通过讲课来建立自己的知识系统
  6. list copy中status列的状态的意义。
  7. bwl老二吃嘲讽吗_怀旧服BWL2小时全通最简打法!时光点燃一次过
  8. 自动选择SVG和VML的WEB页面
  9. Windows 10专业版下如何启用语音识别功能
  10. Java 跑酷游戏 rush,翻转跑酷游戏安卓下载|翻转跑酷最新版(Flip Rush)下载v1.0.5-乐游网安卓下载...
  11. 命令行编译执行java文件
  12. iocomp-Crack|New Version最新【2021】
  13. ansys mechanical 脚本编写
  14. Windows Server 2003 AGP纹理加速无法打开问题可行的解决方案
  15. 如何在为知笔记(Wiz)和印象笔记(Evernote)之间相互迁移笔记?
  16. cesium加载动图方案三:通过apng-js库实现
  17. SQL Server之创建数据库和表
  18. crmeb多商户系统安装(1)
  19. 3D 建模费时费力,Python 让照片秒变模型
  20. 图像处理---亚像素

热门文章

  1. 交叉编译ncurses5.6
  2. 关闭TCP连接的学问
  3. 搞IT也不能不懂“五险一金”啊
  4. 在WinCE5.0和WinCE6.0下,编译选项介绍
  5. python3 x和python2 x区别_Python知识:Python 3.x和2.x版本的使用区别
  6. ipfs 云服务器_IPFS加速云服务生机和分布式存储
  7. Java学习笔记——函数式接口
  8. linux shell 原理,linux下shell的工作原理
  9. python离线安装pip出现timeout_Python pip安装包出现timeout的解决办法,修改国内的镜像源...
  10. 工作区、暂存区、版本库、远程仓库