优雅记录日志的Python技巧

图片[1]-优雅记录日志的Python技巧-山海云端论坛

引言

在日常开发中,使用print函数进行调试是常见的做法。然而,随着代码的增多,使用print语句来调试可能会变得混乱不堪。为了更清晰地追踪代码的执行情况,以及更方便地记录和管理日志,Python提供了logging模块。而Loguru则是logging模块的一个强大替代品,提供了更丰富、更直观的日志记录功能。

开箱即用特性

对比logging模块的默认输出,Loguru默认生成的日志内容更加丰富、颜色更鲜明,让日志信息一目了然。Loguru的使用示例如下:

<code>from loguru import logger def main(): logger.debug("This is a debug message") logger.info("This is an info message") logger.warning("This is a warning message") logger.error("This is an error message") if __name__ == "__main__": main()</code>

控制输出格式

Loguru允许您通过使用格式化字符串来指定日志输出的格式,这使得代码更易读、更易用。相比之下,logging模块使用的格式化方式相对繁琐。下面是Loguru和logging模块的格式化字符串对比:

Loguru:

<code>logger.add( sys.stdout, level="INFO", format="{time:YYYY-MM-DD HH:mm:ss} | {level} | {module}:{function}:{line} - {message}", )</code>

logging模块:

<code>logging.basicConfig( level=logging.INFO, format="%(asctime)s | %(levelname)s | %(module)s:%(funcName)s:%(lineno)d - %(message)s", datefmt="%Y-%m-%d %H:%M:%S", )</code>

将日志保存到文件

使用Loguru,您只需使用add函数即可将日志保存到文件并打印到终端,而不需要额外创建FileHandler和StreamHandler。以下是Loguru和logging模块的对比示例:

Loguru:

<code>logger.add( 'info.log', format="{time:YYYY-MM-DD HH:mm:ss} | {level} | {module}:{function}:{line} - {message}", level="INFO", )</code>

logging模块:

<code>logging.basicConfig( filename="info.log", level=logging.INFO, format="%(asctime)s | %(levelname)s | %(module)s:%(funcName)s:%(lineno)d - %(message)s", datefmt="%Y-%m-%d %H:%M:%S", )</code>

日志过滤

Loguru允许您使用lambda函数实现日志过滤,从而根据特定条件有选择地控制输出哪些日志记录。相比之下,在logging模块中,您需要创建自定义的日志过滤类。以下是Loguru和logging模块的过滤功能示例:

Loguru:

<code>logger.add("hello.log", filter=lambda x: "Hello" in x["message"], level="INFO")</code>

logging模块:

<code>class CustomFilter(logging.Filter): def filter(self, record): return "Hello" in record.msg</code>

总结

Loguru是logging模块的一个强大替代品,提供了更丰富、更直观的日志记录功能。尽管引入Loguru需要额外安装,但它轻巧且易于使用,极大地简化了日志记录的代码量。因此,在日常工作中,强烈建议使用Loguru来记录和管理日志信息。

© 版权声明
THE END
喜欢就支持一下吧
点赞6 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容