`
yinwufeng
  • 浏览: 289887 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

日志级别的设置

阅读更多

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

        

Java代码 复制代码
  1. log.Warn("message");   
  2. System.Diagnostics.Debug.Fail("警告""message");  
log.Warn("message");
System.Diagnostics.Debug.Fail("警告", "message");

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

转自:http://fengshen-xia.iteye.com/blog/295961

 

分享到:
评论

相关推荐

    动态设置log4j的日志级别

    本文将详细讲解如何动态设置Log4j的日志级别,以满足不同场景下的需求。 首先,我们要理解日志级别的概念。Log4j提供了多个日志级别,从低到高依次为:DEBUG、INFO、WARN、ERROR和FATAL。不同的日志级别用于记录...

    Log4j日志等级,具体说明了log4j中的日志记录等级,对于自己写日志有很大帮助。

    通过合理设置日志级别,Log4j可以帮助开发者和系统管理员有效地管理日志输出,确保在不同环境下(如开发、测试和生产)记录合适的信息量。正确使用日志级别不仅可以提高应用程序的可维护性和可监控性,还可以在故障...

    python 日志模块 日志等级设置失效的解决方案

    本文将深入探讨Python日志模块中日志等级设置失效的问题及其解决方案。 日志等级是定义日志消息级别的一种方式,它允许我们过滤掉不关心的信息,专注于程序运行中的关键问题。Python的`logging`模块提供了多个预定...

    log4j日志级别详细介绍

    这意味着,如果设置了一个较低优先级的日志级别(如INFO),那么所有优先级低于INFO的日志都不会被记录下来。例如,当将日志级别设置为INFO时,只有INFO、WARN、ERROR、FATAL级别的日志会被记录;而DEBUG和TRACE级别...

    日志服务器配置,接收H3C路由器日志

    这里假设日志服务器的IP地址为1.2.0.1,并且使用默认的loghost通道,日志级别设置为local5。 ``` [Sysname]info-center loghost 1.2.0.1 channel loghost facility local5 ``` 3. **配置输出规则** 最后一步是...

    logback日志分目录分级别案例

    -- 日志级别设置 --> ``` 上述配置中,我们创建了两个文件日志 appender:一个用于记录 `INFO` 级别及以上的日志,另一个用于记录 `ERROR` 级别的日志。`TimeBasedRollingPolicy` 用于按日期滚动日志...

    Spring Cloud OpenFeign - 日志配置

    但为什么按上面步骤将 OpenFeign 的日志级别设置成 FULL 级别后,还是没有打印日志信息呢?这是因为 OpenFeign 的调试日志是以 debug 级别来输出的。而 Spring Boot 默认的日志级别是 info 级别。

    logback日志级别动态切换的终极方案(Java ASM使用).doc

    通过ASM,可以在程序运行时修改Logger类的字节码,插入自定义的逻辑,如设置日志级别或过滤特定日志。这种方法需要对ASM、Java Agent和JVM指令有深入理解。 实施ASM方案的步骤大致如下: 1. 创建一个新的Maven工程...

    Java简易日志组件

    1. **等级控制**:日志系统通常支持多种日志级别,如DEBUG、INFO、WARN、ERROR和FATAL,允许开发者根据需要调整日志信息的详细程度。 2. **日志输出**:日志信息可以输出到控制台、文件、网络甚至是数据库,方便...

    c#log日志类和日志分析器(源码)

    1. **日志级别设置**:允许用户根据需要选择记录哪些级别的日志信息。 2. **格式化输出**:支持自定义日志输出的格式,包括日期、时间、线程ID、日志级别前缀等。 3. **目标输出**:可以将日志写入控制台、文件、...

    设置打印级别日志调试

    调试示例代码:全局的开关,日志输出需要优先级控制,通过重定义的方式,将所有的日志输出指令定义到合适的输出路径,当需要修改输出路径的时候,只要修改重定义的部分即可。

    serv-u设置启用日志

    在这里,你可以选择开启日志,设置日志级别(如信息、警告、错误等),以及日志文件的位置。日志文件可以设置为按日期自动滚动,以避免单个文件过大。 4. **读取readme**:在不明白具体操作或者遇到问题时,readme....

    Logback 异常日志减少打印内容

    如果你只想捕获异常相关的错误信息,可以将全局日志级别设置为ERROR或WARN。 在`logback.xml`配置文件中,你可以通过以下方式设定日志级别: ```xml <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{...

    TensorFlow设置日志级别的几种方式小结

    本文将详细讨论如何设置TensorFlow的日志级别,以便在开发和优化过程中控制输出信息的详细程度。 首先,TensorFlow提供了四种不同的日志级别:DEBUG、INFO、WARN(警告)和ERROR。默认情况下,所有级别的日志都会被...

    Cisco路由器发送日志到日志服务器

    默认情况下,Cisco路由器的日志级别设置为“Error”(即只记录级别为3及以上的日志)。 ##### 日志源接口 为了确保日志信息准确无误地发送到日志服务器,需要指定日志的源IP地址。这可以通过`logging source-...

    LogHelper C#日志记录

    7. **配置文件支持**:通过配置文件,开发者可以方便地修改LogHelper的行为,如日志存储路径、文件大小限制、日志级别设置等,无需修改代码即可实现日志策略的调整。 在实际应用中,开发者可以通过调用LogHelper类...

    log4j记录Debug日志

    7. **自定义日志等级**:除了预设的日志级别,Log4j还允许开发者自定义新的日志级别,以满足特定场景的需求。 8. **性能优化**:Log4j通过延迟初始化和日志门面模式,可以在不影响性能的情况下,实现高效的日志记录...

    Springboot统一web请求日志

    在`application.properties`或`application.yml`中,可以通过`logging.level.<package>=<level>`来设置不同包的日志级别,例如:`logging.level.org.springframework.web=DEBUG`将Spring Web相关类的日志级别设置为...

    C++实现日志库

    在日志库中,我们可以用它来存储日志级别设置、输出目标和格式等。C++库如TinyXML或pugixml可以帮助我们解析XML文件,获取配置信息。 **日志信息分级**:创建一个枚举类型来表示日志级别,然后在输出日志时检查级别...

    vc++日志管理 通用性很好

    文件"vcLog"可能包含了实现上述功能的类库或示例代码,可能包括一个日志类(如`CLog`),该类包含初始化、写入日志、关闭日志等方法,并且支持不同的日志输出目的地和日志等级设置。通过阅读和理解这个代码,开发者...

Global site tag (gtag.js) - Google Analytics