代码开发过程中对日志的使用总结

在日常开发过程中,日志是代码的必要组成部分,一个好的代码也必然有一个好的日志输出,优秀的日志不仅可以快速帮助我们分析定位问题还可以在对日志的数据挖掘中产生很大的威力。

1、java在发生异常时可以打印它的堆栈信息以帮助调试,但是java的异常也有下列问题:

1)java出现异常时只能展示静态的调用堆栈信息,对应异常之前的调用参数则无法进行展示,也就是只知道哪里发生了异常,而不知道是哪些数据导致了异常;

2)java的异常堆栈通常是直接定位到某个文件的某一行,在发生异常时,如果不看代码都不知道异常详细情况,可读性比较差;

2、使用日志索引,具体为:

1)在一次调用的整个流程内部使用一个统一的索引,其格式为:<cid:索引号>

2)产生索引,对于任务类型的,一个任务的整个执行流程使用一个统一的索引;

3)索引可以由外部传入和内部自己生成两种方式,外部传入时,可以做到各服务模块之间的日志一致;内部生成时,一般在任务的执行之前产生;

4)索引的类型,可以使用long型整数;

3、在每条日志中都要首先输出该条日志所在的位置:类名或文件名以及该条日志所在的函数名,如此以来,在程序出现问题时,即使不用查看代码也能根据层级的日志显示看出问题出现的位置和原因,能极大提高问题解决的速度

4、日志输出格式:

[日志位置]<lid:日志索引>日志内容
例如:logger.warn(String.format("[UserInfo.checkUserInfo]<cid:%d>user name:%s", userName, logIndex));
在项目开发中,如果所有模块,无论语言,均采用这种日志输出模式,在后期日志收集和分析中将会有很大的用处

5、日志输出注意事项:

1)在任务执行之前和执行之后打印log,任务执行之前的log上带上当前任务的所有参数,任务执行结束的log尽量带上当前的处理结果;

2)在关键函数入口处(即进入该函数的开始位置)和出口前打印log,入口处的log带上当前的参数,出口处的log尽量带上当前的处理结果;

3)在错误和异常日志中带上错误和异常执行前的关键参数;在实际开发中经常会遇到各种条件判断,如果条件不满足,则返回错误,此时再返回之前尽量要输出一条log,并在该log上带上引起错误的参数,对于异常也是如此;

4)在关键代码前加上log,log要带上当前的重点参数;例如,有一段代码是向另外一个模块发送消息,则在发送消息之前最好加上log,log中要带上向哪里发送什么;

5)在有关键信息出现的地方加log,并在log中输出这些关键的信息;

6)日志描述要简洁清晰;

6、日志输出一定要分等级显示,例如debug,warn,error等;在log输出时要分级别显示:

如果遇到程序无法继续执行的情况,log级别是error;

如果程序虽然出错但是还依然可以继续运行,log级别是warn;

如果关键信息的输出可以使用info或者debug;

其他调试信息可以使用debug级别;

7、综合上述,在开发过程中需要做到以下两点:

1)所有函数的第一个参数都必须是long型的logIndex参数,例如:

String logIn(long logIndex, String userInfo);

2)所有的日志在自己输出内容的开头必须遵循格式:

    [日志位置]<lid:日志索引>日志内容
时间: 2024-10-02 23:56:26

代码开发过程中对日志的使用总结的相关文章

log4js-Node.js中的日志管理模块使用与封装

开发过程中,日志记录是必不可少的事情,尤其是生产系统中经常无法调试,因此日志就成了重要的调试信息来源. Node.js,已经有现成的开源日志模块,就是log4js,源码地址:点击打开链接 项目引用方法: npm install log4js 1.配置说明(仅以常用的dateFile日志类型举例,更多说明参考log4js-wiki): { "appenders": [ // 下面一行应该是用于跟express配合输出web请求url日志的 {"type": "

项目日志的管理和应用 log4js-Node.js中的日志管理模块使用与封装

开发过程中,日志记录是必不可少的事情,尤其是生产系统中经常无法调试,因此日志就成了重要的调试信息来源. Node.js,已经有现成的开源日志模块,就是log4js,源码地址:点击打开链接 项目引用方法: npm install log4js 1.配置说明(仅以常用的dateFile日志类型举例,更多说明参考log4js-wiki): [javascript] view plain copy { "appenders": [ // 下面一行应该是用于跟express配合输出web请求ur

log4js-Node.js中的日志管理模块使用与封装【转】

首先log4js-node将输出的log分为六个的level,每个level的含义从字面就可以看出, 对于不同的level,log输出到终端时会使用不同的颜色 (trace: 蓝色,debug: 青色, info:绿色,warn:黄色,error:红色, fatal:粉色).终端是log4js-node的默认输出地点. 默认情况下,log4js-node的每条log输出格式有如下几个字段:日志产生时间,level,日志分类,日志内容.如果用户没有配置,日志分类字段为“default”. 以下转自

iOS开发过程中,是用Storyboard/xib做界面,还是用代码来写界面,还是混合使用

以下是个人观点,非喜勿喷 关于iOS 开发过程中,是用Sb/xib 做界面 还是代码写界面,一直是讨论不断 各自成帮结派, 拖拉派.代码派.中间派 1. 拖拉派 ,Storyboard/xib 使用者, 像是海贼王里的能力者,开发快.Auto Layout .结构清晰,直观,一目了然 (个人觉得,小项目如此,超过10个界面以上,界面关系在复杂的话,看起来真是一团糟),能力者是有缺点的不会游泳, 同样Storyboard/xib 同样有它的缺点:(以下摘自) a). 所有的ViewControll

C语言开发过程中目标代码文件、可执行文件和库

一.C程序开发的一般流程 1:定义程序的目标,明确程序的功能,明确程序中需要哪些信息.计算和控制,明确程序中应该报告什么信息,不会设计到具体的计算机语言,对于问题的描述一般用的是术语: 2:设计程序,考虑如何通过程序实现程序的目标,具体一点说,需要考虑的可以有用户界面的设计.程序的组织.目标用户的确定以及程序开发时间计划,除了这些,好需要确定是在程序中(也有可能是在辅助文件中)数据的表示形式以及数据的处理方法.这个阶段,不会用到具体的代码.问题的描述用的是一般术语,但是不排除某些决策会和具体的语

android app 开发过程中 对于性能优化的总结

一款手机应用  从开发过程中就要做好 性能优化,这样才能 让用户体验度 提升, 假如 我们打开一个应用 出现卡顿, 不流畅,则会很影响 用户对该应用的态度,产品狗 都很注意这些人机交互方面的 体验. 谷歌官方也是一直在优化 android 系统,不论是  碎片化处理 还是 系能 上面,这方面 ios 就做的比较好,配置比 android 低,但是流畅度却比android高,体验效果更好. 官方推荐方案:http://www.oschina.net/news/60157/android-perfo

asp.net mvc开发过程中的一些小细节

现在做网站用mvc越来越普及了,其好处就不说了,在这里只记录一些很多人都容易忽视的地方. 引用本地css和js文件的写法 这应该是最不受重视的地方,有同事也说我有点小题大作,但我觉得用mvc还是得有一个好习惯,对于维护那肯定是有帮助的. 首先是下面的代码(推荐写法) <link href="@Url.Content("~/content/style.css")" rel="stylesheet" type="text/css&qu

ROS中的日志(log)消息

学会使用日志(log)系统,做ROS大型项目的主治医生 通过显示进程的运行状态是好的习惯,但需要确定这样做不会影响到软件的运行效率和输出的清晰度.ROS 日志 (log) 系统的功能就是让进程生成一些日志消息,显示在屏幕上.发送到特定 topic 或者储存在特定 log 文档中,以方便调试.记录.报警等.下面简单介绍如何生成和查看日志消息. 日志消息 在ROS中,有一个特殊的话题叫作/rosout,它承载着所有节点的所有日志消息./rosout消息的类型是rosgraph_msgs/Log: r

9 个技巧,解决 K8s 中的日志输出问题

作者 | 元乙??阿里云存储服务技术专家 导读:近年来,越来越多的同学咨询如何为 Kubernetes 构建一个日志系统,或者是来求助在此过程中遇到一系列问题如何解决,授人以鱼不如授人以渔,于是作者想把这些年积累的经验以文章的形式发出来,让看到文章的同学少走弯路.K8s 日志系列文章内容偏向落地实操以及经验分享,且内容会随着技术的迭代而不定期更新,本文为该系列文章的第 3 篇. 第一篇:<6 个 K8s 日志系统建设中的典型问题,你遇到过几个?> 第二篇:<一文看懂 K8s 日志系统设计