如何为你的模块添加日志
日志对 应用程序
来说至关重要,当程序在 测试部
或 用户端
发生异常时,日志能协助 开发人员
快速地定位问题。对于刚刚上手团队项目的新人来说,可能会有许多疑惑。什么情况下需要添加日志?如何添加日志?
主要内容
- 什么情况下需要添加日志
- 流程性的代码
- 涉及到数据传输的代码
- 捕获到异常或错误的代码
- 如何添加日志
- 日志文件存哪里
- 本地存储
- 上报后台
- 日志文件的格式
- 日期时间
- 线程 ID
- 分等级存储
- 版本信息
- 日志框架
- log4net
- 日志文件存哪里
- 注意事项
- 敏感信息不能明文存储
- 定期删除本地日志文件
- 避免耗时操作
- 避免崩溃
什么情况下需要添加日志
- 流程性的代码
- 涉及到数据传输的代码
- 捕获到异常或错误的代码
流程性的代码
对于流程性的代码,当出现问题时,我们需要知道是执行到哪一步出问题的,这种情况下,通常需要 将其执行过程输出到日志文件
中。
涉及到数据传输的代码
如果你的模块需要和第三方程序进行数据通讯(包括从服务端拉取数据等),我们通常需要 将通讯的过程、数据等记录到日志
,这样有助于 多方协同定位问题(甩锅)
,真的很管用!!!
捕获到异常或错误的代码
这个就很好理解了,通常在 try...catch
时将捕获到的异常信息输出到日志中。当然,也可以将自己觉得 重要的、容易造成异常的、有助于自己锁定问题的
信息记录到日志中。
![](https://i-blog.csdnimg.cn/blog_migrate/f17c053be417531faa3a6a047db460d4.png)
![](https://i-blog.csdnimg.cn/blog_migrate/01c109fb29536f53aceb5cade69c6cfd.png)
如何添加日志
- 日志文件存哪里
- 日志文件的格式
- 日志框架
日志文件存哪里
先来解决日志文件存哪里的问题,要么 存本地
,要么 推送到远端服务器
。对于存本地的日志,一定要选择一个具有 读写权限
的路径,曾经遇到第三方 DLL 将日志存到系统盘根目录,因权限问题导致引用方程序奔溃,花了很长时间才定位到问题。
本地存储
对于 Windows 应用程序而言,通常将日志文件存在 %appdata%
目录下的相应文件夹中,按产品名(应用名)来管理。对于一个大型应用来讲,通常需要在框架中集成日志模块,以实现统一的读写日志的方法,以及统一的管理日志文件的策略。
在自己的独立应用中,如果不想引用现成的日志框架,也可以自己实现一个轻量级的日志模块。需要注意的是,一定 不要让日志模块的异常影响到主程序
。
上报后台
对于 异常类型
的信息,需要及时上报到服务器,以便我们监控软件的使用状态,及时发现问题,这种日志的上报往往需要强大的后台支持。
![](https://i-blog.csdnimg.cn/blog_migrate/9658fc06d868a6b91aecc532cd16d684.png)
日志文件的格式
- 日期时间
- 线程ID
- 分等级存储
- 版本信息
- log4net
日志文件中通常 按行
来记录日志信息,每一条日志中最好还要包括 日期和时间
信息,时间通常精确到 毫秒
。如果是多线程应用,每条日志上最好附上 线程ID
。对于大型应用,其日志信息会比较多,为了便于查找,通常会 分等级存储日志
。例如,普通的流程性日志存到 info.log
文件中,错误类型的存到 error.log
文件中,异常或奔溃类型存到 fatal.log
文件中。除此之外,还可以将 应用程序的版本号
等信息存储存储到每一条日志中。
![](https://i-blog.csdnimg.cn/blog_migrate/f1ade41270900fe4230bf36b466c83e4.png)
日志框架
- log4net
如果要自己实现上面这些信息的存储,还是需要一些功夫的。对于大型的项目,推荐使用强大的 log4net
开源日志框架。
注意事项
- 指定编码格式
- 敏感信息不能明文存储
- 定期清理本地日志文件
- 避免写日志时发生崩溃
- 避免耗时的日志操作
首先,敏感信息(用户名、密码等
)千万不要明文存到日志文件中;其次,需要定期(或定量)清理日志文件,曾经有应用在系统盘存了几个 G 的日志,被用户投诉了;最后,不能让日志模块影响对应用的本身性能和稳定性造成影响,既要防止耗操作和崩溃。