如何为你的模块添加日志

如何为你的模块添加日志

日志对 应用程序 来说至关重要,当程序在 测试部用户端 发生异常时,日志能协助 开发人员 快速地定位问题。对于刚刚上手团队项目的新人来说,可能会有许多疑惑。什么情况下需要添加日志?如何添加日志?

主要内容

  • 什么情况下需要添加日志
    • 流程性的代码
    • 涉及到数据传输的代码
    • 捕获到异常或错误的代码
  • 如何添加日志
    • 日志文件存哪里
      • 本地存储
      • 上报后台
    • 日志文件的格式
      • 日期时间
      • 线程 ID
      • 分等级存储
      • 版本信息
    • 日志框架
      • log4net
  • 注意事项
    • 敏感信息不能明文存储
    • 定期删除本地日志文件
    • 避免耗时操作
    • 避免崩溃

什么情况下需要添加日志

  • 流程性的代码
  • 涉及到数据传输的代码
  • 捕获到异常或错误的代码

流程性的代码

对于流程性的代码,当出现问题时,我们需要知道是执行到哪一步出问题的,这种情况下,通常需要 将其执行过程输出到日志文件 中。

涉及到数据传输的代码

如果你的模块需要和第三方程序进行数据通讯(包括从服务端拉取数据等),我们通常需要 将通讯的过程、数据等记录到日志 ,这样有助于 多方协同定位问题(甩锅),真的很管用!!!


捕获到异常或错误的代码

这个就很好理解了,通常在 try...catch 时将捕获到的异常信息输出到日志中。当然,也可以将自己觉得 重要的、容易造成异常的、有助于自己锁定问题的 信息记录到日志中。

如何添加日志

  • 日志文件存哪里
  • 日志文件的格式
  • 日志框架

日志文件存哪里

先来解决日志文件存哪里的问题,要么 存本地,要么 推送到远端服务器。对于存本地的日志,一定要选择一个具有 读写权限 的路径,曾经遇到第三方 DLL 将日志存到系统盘根目录,因权限问题导致引用方程序奔溃,花了很长时间才定位到问题。

本地存储

对于 Windows 应用程序而言,通常将日志文件存在 %appdata% 目录下的相应文件夹中,按产品名(应用名)来管理。对于一个大型应用来讲,通常需要在框架中集成日志模块,以实现统一的读写日志的方法,以及统一的管理日志文件的策略。

在自己的独立应用中,如果不想引用现成的日志框架,也可以自己实现一个轻量级的日志模块。需要注意的是,一定 不要让日志模块的异常影响到主程序

上报后台

对于 异常类型 的信息,需要及时上报到服务器,以便我们监控软件的使用状态,及时发现问题,这种日志的上报往往需要强大的后台支持。

日志文件的格式

  • 日期时间
  • 线程ID
  • 分等级存储
  • 版本信息
  • log4net

日志文件中通常 按行 来记录日志信息,每一条日志中最好还要包括 日期和时间 信息,时间通常精确到 毫秒 。如果是多线程应用,每条日志上最好附上 线程ID 。对于大型应用,其日志信息会比较多,为了便于查找,通常会 分等级存储日志 。例如,普通的流程性日志存到 info.log 文件中,错误类型的存到 error.log 文件中,异常或奔溃类型存到 fatal.log 文件中。除此之外,还可以将 应用程序的版本号 等信息存储存储到每一条日志中。

日志框架

  • log4net

如果要自己实现上面这些信息的存储,还是需要一些功夫的。对于大型的项目,推荐使用强大的 log4net 开源日志框架。

在这里插入图片描述

注意事项

  • 指定编码格式
  • 敏感信息不能明文存储
  • 定期清理本地日志文件
  • 避免写日志时发生崩溃
  • 避免耗时的日志操作

首先,敏感信息(用户名、密码等)千万不要明文存到日志文件中;其次,需要定期(或定量)清理日志文件,曾经有应用在系统盘存了几个 G 的日志,被用户投诉了;最后,不能让日志模块影响对应用的本身性能和稳定性造成影响,既要防止耗操作和崩溃。

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
在Python中,可以使用logging模块记录日志信息,方便程序员在开发和生产环境中进行调试和问题排查。logging模块提供了全局配置方法,可以通过配置来控制日志的格式、输出方式和级别等。 下面是一个简单的例子,展示如何使用logging模块进行全局配置: ``` import logging # 配置日志格式 formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s') # 创建一个StreamHandler,用于输出到控制台 console_handler = logging.StreamHandler() console_handler.setFormatter(formatter) # 创建一个FileHandler,用于输出到文件 file_handler = logging.FileHandler('example.log') file_handler.setFormatter(formatter) # 创建一个Logger实例 logger = logging.getLogger('example') logger.setLevel(logging.DEBUG) # 将StreamHandler和FileHandler添加到Logger实例中 logger.addHandler(console_handler) logger.addHandler(file_handler) ``` 在上面的例子中,首先创建了一个Formatter对象,用于配置日志的格式。然后,创建了一个StreamHandler和FileHandler,分别用于将日志输出到控制台和文件中。接下来,创建了一个Logger实例,并设置了日志级别为DEBUG。最后,将StreamHandler和FileHandler添加到Logger实例中。 通过全局配置,可以方便地控制日志的输出方式和级别。在程序中,只需要使用logger对象来记录日志即可,例如: ``` logger.debug('debug message') logger.info('info message') logger.warning('warning message') logger.error('error message') logger.critical('critical message') ``` 通过上述配置,日志信息将输出到控制台和文件中,并且可以根据需要调整日志级别。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ironyho

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值