编辑
2024-05-01
CS_杂项
0
请注意,本文编写于 140 天前,最后修改于 140 天前,其中某些信息可能已经过时。

目录

简单使用
格式化日志
日志保存
日志轮换
日志筛选
捕获异常

Python开源日志库Loguru

日志打印比print()方式更容易debug。 安装命令:pip install loguru loguru中最重要的就是add()函数:此函数应用于注册接收器,接收器负责管理使用记录字典上下文化的日志消息。接收器可以采用多种形式:简单函数、字符串路径、类似文件的对象、协程函数或内置处理程序。请注意,您还可以remove()使用添加时返回的标识符来添加以前添加的处理程序。如果要取代默认stderr处理程序,这将特别有用:只需调用 logger.remove()即可重新开始。

简单使用

python
from loguru import logger 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")

image.png

格式化日志

类似于f-string的语法,格式化输出日志,但是个人感觉系统默认的就挺好看的了。

python
import sys from loguru import logger logger.remove() #清空之前设定的logger logger.add( sys.stdout, level="INFO", format="{time:YYYY-MM-DD HH:mm:ss} | {level} | {module}:{function}:{line} - {message}!", ) logger.error("This is an error message")

image.png

日志保存

在loguru中使用add方法中指明输出到的文件名即可达到目的,本例中是输出到info.log

python
from loguru import logger logger.add( 'info.log', format="{time:YYYY-MM-DD HH:mm:ss} | {level} | {module}:{function}:{line} - {message}", level="INFO", ) 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()

loguru中也支持自动计时创建文件。

python
logger.add("file_{time}.log")

日志轮换

日志轮换指通过定期创建新的日志文件并归档或删除旧的日志来防止日志变得过大

python
logger.add("file_1.log", rotation="500 MB") # Automatically rotate too big file logger.add("file_2.log", rotation="12:00") # New file is created each day at noon logger.add("file_3.log", rotation="1 week") # Once the file is too old, it's rotated logger.add("file_X.log", retention="10 days") # Cleanup after some time logger.add("file_Y.log", compression="zip") # Save some loved space

日志筛选

日志筛选指根据特定条件有选择的控制应输出与保存哪些日志信息 在loguru中,可以简单地使用lambda函数来过滤日志

python
from loguru import logger # logger.remove() logger.add("test.log", filter=lambda x: "Cai Xukong" in x["message"], level="INFO") def main(): logger.info("Hello Cai Xukong") logger.info("Bye Cai Xukong") logger.info("撒撒") if __name__ == "__main__": main()

捕获异常

loguru中,通过显示包含变量值的完整堆栈跟踪来方便用户识别。

python
from loguru import logger def division(a, b): return a / b def nested(c): try: division(1, c) except ZeroDivisionError: logger.exception("ZeroDivisionError") if __name__ == "__main__": nested(0)

image.png 可以使用catch()装饰器/上下文管理器来解决,它确保任何错误都正确地传播到 logger

python
from loguru import logger def division(a, b): return a / b @logger.catch def nested(c): division(1, c) if __name__ == "__main__": nested(0)

image.png

本文作者:Geaming

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!