`
samboy
  • 浏览: 9261 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论
阅读更多
转贴:http://zhhui.bokee.com/1205171.html

一、Log介绍

Log作为是调试程序,监视程序运行的一种重要的方式,特别是在多线程程序和分布式程序中,重要的调试方法。有人统计过在程序中,有4%的代码是Log。

绝大多数的大型开发项目都有它们自己专门用于记录程序日志和对程序跟踪调试的API。许多经验证明,调试信息的管理在软件开发过程中扮演了十分重要的角色。日志管理通常提供了以下的几点好处:首先,它能在程序运行过程中精确的提供运行时的上下文(context)方便开发人员找到 BUG,一旦在程序中加入了Log 输出的代码,程序运行过程中就能自动的生成并输出logging信息。其次,log信息可以输出到不同的地方(控制台,文件,日志服务器等等)以备时候研究。最后,除了在开发过程中发挥它的作用外,一个功能足够强大的日志记录开发包能当作一个审计工具(audit tool)使用。

同时,Log确实也存在一些缺陷,比如,它影响了程序运行的速度,增加了代码的开销,增加了许多无谓的输出。为了减少这些负面因数的影响,log应该被设计得尽量的高效和灵活。


一、Log介绍

Log作为是调试程序,监视程序运行的一种重要的方式,特别是在多线程程序和分布式程序中,重要的调试方法。有人统计过在程序中,有4%的代码是Log。

绝大多数的大型开发项目都有它们自己专门用于记录程序日志和对程序跟踪调试的API。许多经验证明,调试信息的管理在软件开发过程中扮演了十分重要的角色。日志管理通常提供了以下的几点好处:首先,它能在程序运行过程中精确的提供运行时的上下文(context)方便开发人员找到 BUG,一旦在程序中加入了Log 输出的代码,程序运行过程中就能自动的生成并输出logging信息。其次,log信息可以输出到不同的地方(控制台,文件,日志服务器等等)以备时候研究。最后,除了在开发过程中发挥它的作用外,一个功能足够强大的日志记录开发包能当作一个审计工具(audit tool)使用。

同时,Log确实也存在一些缺陷,比如,它影响了程序运行的速度,增加了代码的开销,增加了许多无谓的输出。为了减少这些负面因数的影响,log应该被设计得尽量的高效和灵活。

二、Log基本概念

1、  级别(Level):输出日志的重要程度,便于控制日志输出的多少。

2、  输出目的地(Appender):日志可以被写入的存储空间,常见的有控制台、文件、数据库、NT日志库、Syslog、远程文件服务器等等。

3、  输出格式(Layout):日志输出的内容,如日期格式、是否显示输出级别等。

三、Log问题

怎么记录Log,在什么地方记,记录什么信息,怎么很容易的在发布版中去掉Log。

3.1   Log的分级

在程序中Log进行分级是很重要的,通常可以分为6级:ALL<DEBUG<INFO<ERROR<FATAL<NONE,Log的级别是可以配置的,当总的Log级别是ERROR时,则级别低于ERROR的都不会输出,只有高于或等于ERROR的才被输出。在程序中,可以指定的级别只有中间的四种。

DEBUG代表这些Log是用来输出调试信息,一般是在程序中不是非常重要的地方;INFO代表一些比较重要的信息,比如程序初始化完毕;ERROR一般指程序本身引起的,可以恢复的错误;FATAL一般指程序所依赖的环境出现错误,使的程序不恢复。其中常用的是DEBUG和ERROR。

3.2   在什么地方记Log
基本原则:

l         对程序的输入输出要以DEBUG记录下来,常包括从文件、数据库、网络、用户等输入的信息,向文件、数据库、网络输出的信息。

l         对重要对象或结构体的修改,要以INFO记录修改前的信息和修改后的状态。

l         不能忽视每个调用错误。

l         记下打印信息时所在的文件名和函数名(必须能区分开重载函数),有行数最好。

一般原则:

1、  在程序开始运行应该以INFO记录程序开始运行的消息。

2、  在程序初始化过程中,如果影响程序主体正常运行错误出现,应该以FATAL记录出现错误的函数名、事件和错误号;如果只是一个不影响程序正常功能的模块出现错误,则应该以ERROR记录出现错误的函数名、模块名、事件和错误号。

3、  在程序初始化完成后,应该以INFO记录程序初始化完成的消息。

4、  在函数的入口,如果需要验证参数,则可以以DEBUG的形式输出参数的信息。如果重要参数不正确,则应该以ERROR输出。

5、  在调用比较成熟的API时,如果失败,则以ERROR记录,并且有错误号记下错误号。

6、  在调用没有经过严格测试的库时,即使返回成功,也要以DEBUG的形式记录下返回的结果。

7、  以捕获异常时,以ERROR记录下错误。

8、  在进行数据库操作时,以DEBUG的级别输出执行的SQL词句,对于取回的结果,最好是能打印出所有构造完成的对象的信息。

9、  在与其它程序进行通信时,以DEBUG记录下通信过程中的重要信息。

10、 对程序中的每个线程,它们的初始化完成和开始运行也要以INFO记录下来。

11、 对程序中需要检查运行性能的地方,以DEBUG记录下运行耗时。

12、 程序正常结束时,和初始化的记录方式相同,对各个模块的卸载采用和加载是一样的处理方式。当程序都卸载完成后以INFO记录程序退出的消息。
分享到:
评论
1 楼 Qaohao 2010-05-07  
log的介绍都贴了两遍

相关推荐

    Oracle 如何规范清理v$archived_log记录实例详解

    Oracle 如何规范清理v$archived_log记录实例详解 单机实例上面,v$archived_log 很多,有上万条记录了,所以得清理一下,不然每次查询都直接滚屏幕了 SQL&gt; select sequence#,applied from v$archived_log order by ...

    Log4j使用手册 日志记录包

    程序开发环境中的日志记录是由嵌入在程序中以输出一些对开发人员有用信息的语句所组成。例如,跟踪语句(trace),结构...通过规范日志记录的处理过程,一些人认为应该鼓励更多的使用日志记录并且获得更高程度的效率。

    日志规范总结

    生产和测试环境中需要日志来记录、跟踪和分析系统的运行状态,但是有太多带有杂讯的日志又会影响跟踪,甚至可能对系统的运行带来影响。如果生产环境里运行的程序没有日志,会让问题定位变得异常艰难。但冗余的日志...

    learning_log.rar

    Learning Log 是本次要开发的一个日志系统。django web框架帮助开发交互式的网站,响应网页的请求,读取管理用户等。主要记录django 的安装,应用程序的创建、网页的创建、账户创建、数据约束、页面样式设定等。 1....

    通用的日志记录类,适用于规范的日志记录

    日志记录最好使用log4net,但是对于一些小应用程序,就不用这么复杂了,写了一个供大家参考。

    java代码实例-日志规范史上最全java日志攻略(附教程)

    logback记录tomcat的访问日志" log4j2 "log4j2的日志框架 log4j2的配置 异步日志的使用" spring整合log "依赖的选择 日志的配置文件" SpringBoot日志 "SpringBoot日志 中间转换包统一日志框架 SpringBoot修改日志的...

    SQL编写规范(数据库操作规范)

     PG需要将自己添加的查询SQL文记入log,然后在EXPLAIN PLAN中进行分析,尽量减少全表扫描    ORACLE SQL性能优化系列    1.选择最有效率的表名顺序(只在基于规则的优化器中有效)    ORACLE的解析器按照从右到...

    Log4NetAppenders:适用于Apache log4net的Appender,专门用于允许远程SSL日志记录到Synology NAS上运行的系统日志。 这应该适用于符合BSD规范的任何系统日志

    这应该适用于符合BSD规范的任何系统日志。 EncryptedForwardingAppender:ForwardingAppender允许对记录的消息(消息文本和异常文本)进行加密。 当前的实现使用PGP / GPG加密。 注意:代码库中提供了SSL证书和...

    NTFS文件系统规范

    MFT文件记录 3 更新序列号 4 虚拟簇号 4 逻辑簇号 4 数据流描述 4 系统文件 6 $MFT 7 未命名数据流格式 7 $MFTMirr 7 未命名数据流格式 8 $LogFile 8 Log file restart page header 8 Log file restart area record:...

    go-log:Pacakge go-log 扩展了标准日志包以利用 BSD 日志级别并允许使用多个日志消息接收者

    Go-utils 记录器Log 扩展了标准日志包以包括对八种 BSD 样式日志严重性级别的支持。 它与标准日志包兼容,无需更改现有代码。 这是使用此包的基本概述。 有关更详细的规范,请使用godoc或 [godoc.org] ( ) 网站。...

    Oracle数据库设计策略及规范.docx

    索引放到独立的表空间,该表空间不需要REDO LOG。 含有外键约束的表的字段,必须有单独索引。如订单明细的表头外键。 5. 对象命名规范 5.1 一般规范 5.1.1 语言 命名使用英文单词,不使用复数。 Oracle数据库...

    LogBundle:Symfony应用程序的规范化日志记录和跟踪功能

    LogBundle 为所有ETSGlobal Symfony应用程序提供标准化的日志记录和跟踪功能。 概述 主要特点: 自动记录器注入。 提供TokenCollection实用...composer require etsglobal/log-bundle 加载捆绑 // config/Bundles.

    git-commit-lint-vscode:vscode一款git 规范化提交插件

    git 了,当我们对代码进行改动了,首先得git commit提交到本地仓库,git 规定了提交时必须填写提交信息作为改动说明,保存 commit 历史中,可以找到历史代码,也方便他人 review,还可以输出 CHANGELOG,对项目的研发质量都...

    数据库编程规范

    用于应用程序的变量取值 TMP_ 临时表 日志表 日志表以_log结尾,一般志表可以有一段时间之后,进程备份,删除其中一些时间较长的数据。 周期备份表 6. TABY_字符串_YYMM:每年清空的周期表。YY...

    logger:一个静态的 PSR-3 记录器包裹着超酷的 monolog

    ntentan 记录器类尝试与 PSR-3 规范中定义的接口兼容。安装您可以通过 composer 安装 Logger,因为它在 packagist (ntentan/logger) 上可用。例子使用 ntentan 记录器。 &lt;?phpuse ntentan\logger\ Logger ;// ...

    laravel5.6版本下载

    你可以使用 Log 门面记录日志信息,如上所述,日志系统提供了定义在 RFC 5424 规范中的八种日志级别:emergency、alert、critical、error、warning、 notice、info 和 debug: Log::emergency($error); Log::alert&...

    log-event-json-schema:用于记录结构化事件的简单明了的JSON模式

    这可以规范应用程序和团队之间的日志数据,使下游数据(图形,警报等)的使用者可以轻松有效地使用它。 它消除了意外的结构更改,提高了数据使用的可靠性,并最终使日志变得可靠。 此架构已在内部使用,并在...

    wukong-framework:一个基于spring boot的框架

    记录log规范 git提交代码规范 属性参数规范 redis-key命名规范 controller与service命名规范 Java与Mysql数据对应关系 alibaba Idea代码检查插件安装 所有String操作不能自己写,用现成的 DateUtils 其他 服务器部署...

    Struts2 + Spring3 + Hibernate3.5 整合(集成测试配套jar包更新构建脚本使用说明)

    用sf4j及logback(log4j的升级版)记录日志;proxool(据说是dbcp和c3p0三者中最优秀的)做连接池;使用jquery的ajax实现仿google人名自动补全;头像上传剪切压缩处理。 包含有完整的jar包和源代码,可以直接下载...

Global site tag (gtag.js) - Google Analytics