不想手动再配置logging?那可以试试loguru( 二 )
2、日志留存、压缩与清理通常来说如果程序或服务的量级较大 , 那么就可以通过集成的日志平台或数据库来对日志信息进行存储和留存 , 后续有需要的话也方便进行日志分析 。
但对我们个人或者一些中小型项目来说 , 通常只需要以文件的形式留存输出的日志即可 。
尽管我们需要将日志写入到相应的文件中 , 如果是少量的日志那还好 , 但是如果是日志输出或记录时间较长的情况 , 那么单个日志文件就十分之大 , 倘若仍然是将日志都写入到一个文件中 , 那么当日志中的内容增长到一定数量时我们想要读取并查找相应的部分时就十分困难 。 这时候我们就需要对日志文件进行留存、压缩 , 甚至在必要时及时进行清理 。
基于以上 , 我们可以通过对 rotation 、compression 和 retention 三个参数进行设定来满足我们的需要:
rotation 参数能够帮助我们将日志记录以大小、时间等方式进行分割或划分:
import osfrom loguru import loggerLOG_DIR = os.path.expanduser("~/Desktop/logs")LOG_FILE = os.path.join(LOG_DIR, "file_{time}.log")if os.path.exits(LOG_DIR):os.mkdir(LOG_DIR)logger.add(LOG_FILE, rotation = "200KB")for n in range(10000):logger.info(f"test - {n}")
最后呈现如下:
文章插图
02-rotation
随着分割文件的数量越来越多之后 , 我们也可以进行压缩对日志进行留存 , 这里就要使用到compression 参数 , 该参数只要你传入通用的压缩文件扩展名即可 , 如 zip、tar、gz等 。
import osfrom loguru import loggerLOG_DIR = os.path.expanduser("~/Desktop/logs")LOG_FILE = os.path.join(LOG_DIR, "file_{time}.log")if os.path.exits(LOG_DIR):os.mkdir(LOG_DIR)logger.add(LOG_FILE, rotation = "200KB", compression="zip")for n in range(10000):logger.info(f"test - {n}")
从结果可以看到 , 只要是满足了 rotation 分割后的日志文件都被直接压缩成了 zip 文件 , 文件大小由原本的 200kb 直接减少至 10kb , 对于一些磁盘空间吃紧的 Linux 服务器来说是则是很有必要的 。
文章插图
03-compression
当然了 , 如果你不想对日志进行留存 , 或者只想保留一段时间内的日志并对超期的日志进行删除 , 那么直接使用 retention 参数就好了 。
这里我们可以将之前的结果随意复制 N 多份在 logs 文件夹中 , 然后再执行一次加上 retension 参数后代码:
from loguru import loggerLOG_DIR = os.path.expanduser("~/Desktop/logs")LOG_FILE = os.path.join(LOG_DIR, "file_{time}.log")if not os.path.exists(LOG_DIR):os.mkdir(LOG_DIR)logger.add(LOG_FILE, rotation="200KB",retention=1)for n in range(10000):logger.info(f"test - {n}")
当然对 retention 传入整数时 , 该参数表示的是所有文件的索引 , 而非要保留的文件数 , 这里是个反直觉的小坑 , 用的时候注意一下就好了 。 所以最后我们会看到只有两个时间最近的日志文件会被保留下来 , 其他都被直接清理掉了 。
文章插图
04-retention
3、序列化如果在实际中你不太喜欢以文件的形式保留日志 , 那么你也可以通过 serialize 参数将其转化成序列化的 json 格式 , 最后将导入类似于 MongoDB、ElasticSearch 这类数 NoSQL 数据库中用作后续的日志分析 。
from loguru import loggerimport oslogger.add(os.path.expanduser("~/Desktop/testlog.log"), serialize=True)logger.info("hello, world!")
推荐阅读
- 目前配置全性价比高的手机,我只推荐五款,闭着眼买都不会错
- Git服务器配置错误导致日产汽车源码在网上泄露
- 荣耀V40正式得到确认!参数配置也基本确定!售价或将是惊喜
- 三星竟为Galaxy S21系列提供900多种颜色配置
- 红米k40pro和荣耀30区别哪个好 不同点对比参数配置谁好
- 2021年换手机哪个配置最重要,CPU只能排第三位
- 玩转光追大作最低需要什么配置?快来看小狮子的推荐
- 小米11和红米k30pro哪个好性价比高 参数配置对比区别
- 华为nova8与小米10对比哪个好 参数配置区别性能评测
- 三星Galaxy M02s将于1月7日发布!硬件配置很平常