有关日志打印的几点经验

本文总结了关于日志打印的一些关键点,包括模块运行日志、业务日志、模块性能日志和模块外部资源日志的详细打印策略。强调了异常打印、日志级别选择、性能影响考虑以及日志内容的筛选。建议遵循统一的日志格式,并使用分隔符提高可分析性。此外,避免打印无用、不完全或重复的日志,确保在循环中适度打印。
摘要由CSDN通过智能技术生成

前段时间,完善智能导航发送告警短信中短信太长接收不到的bug,牵涉出了日志打印的问题;日志打印这件事说小事小,说大也大,写好日志能方便自己调试代码和发现解决问题,以下就是有关日志打印自己总结的几点经验教训:

日志打印应该分层、分角度,一个好的日志不应该只打印与业务有关的日志。
日志打印应该从以下几个方面去打印:

模块运行日志:模块运行日志包括消息队列的监控、线程的运行状态。该日志应该以INFO级别打印,并且采用间隔打印,或叫做定时打印。以减少日志打印总量。从该角度可以反应出该模块是否有消息队列积压,是否所有线程都运行正常。消息队列的打印可以采用日下格式:

使用统一的关键字Monitor来标示模块运行日志。队列监控日志使用|队列名|消息放入速度|消息取出速度|消息放入个数|消息取出个数|当前队列消息个数|。线程监控日志使用|线程名|线程状态码|,线程状态码可以自己扩展。0表示正常1表示运行结束2表示线程阻塞。

09:16:59.347  INFO  |Monitor|ReceiveTimerQueue|0/s|0/s|0|0|0|
09:16:59.347  INFO  |Monitor|SendRegistQueue|0/s|0/s|0|0|0|
09:16:
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
定义一个优雅的 error 类,可以根据不同情况返回不同的错误,并且打印日志,可以考虑以下几点: 1. 继承自 Python 内置的 Exception 类,这样可以保证 error 类拥有异常处理的基本功能。 2. 为 error 类添加描述信息,方便开发者快速识别错误类型。 3. 添加错误代码,方便开发者快速定位错误。 4. 尽可能地提供详细的错误信息,包括错误发生的位置、原因、以及如何解决等。 5. 使用 Python 内置的 logging 模块将错误信息写入日志文件。 举个例子,假设我们要定义一个网络请求错误的 error 类,可以这样实现: ```python import logging class NetworkError(Exception): """ 网络请求错误 """ def __init__(self, code, message): self.code = code self.message = message def __str__(self): return f"[{self.code}] {self.message}" def log_error(self): logging.error(str(self)) ``` 在上面的例子中,我们定义了一个名为 NetworkError 的 error 类,继承自 Exception 类。我们还为 NetworkError 类添加了两个属性,即 code 和 message,用于存储错误代码和错误描述信息。最后,我们还重写了 __str__() 方法,返回一个包含错误代码和错误描述信息的字符串。 我们还添加了一个 log_error() 方法,使用 Python 内置的 logging 模块将错误信息写入日志文件中。这样,即使程序出现错误,我们也可以通过查看日志文件快速定位问题。 当我们需要根据不同的情况返回不同的错误时,可以在 NetworkError 类中添加不同的构造函数,每个构造函数对应一种错误情况。例如: ```python class NetworkError(Exception): """ 网络请求错误 """ def __init__(self, code, message): self.code = code self.message = message def __str__(self): return f"[{self.code}] {self.message}" def log_error(self): logging.error(str(self)) class TimeoutError(NetworkError): """ 请求超时错误 """ def __init__(self): super().__init__(code=408, message="Request Timeout") class ConnectionError(NetworkError): """ 连接错误 """ def __init__(self): super().__init__(code=500, message="Connection Error") ``` 在上面的例子中,我们定义了两个特定的 error 类:TimeoutError 和 ConnectionError,分别对应请求超时错误和连接错误。这样,当我们出现不同的错误时,只需要抛出对应的 error 类即可,例如: ```python try: # 发送网络请求 except TimeoutError as e: # 处理请求超时错误 e.log_error() except ConnectionError as e: # 处理连接错误 e.log_error() except NetworkError as e: # 处理其他网络错误 e.log_error() ``` 这的 e 是对应的异常对象,我们可以通过它的属性获取错误代码和错误描述信息,同时调用 log_error() 方法将错误信息写入日志文件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值