一日一技:更优雅地在 Python 中写日志

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 一日一技:更优雅地在 Python 中写日志

摄影:产品经理买单:kingname

原来我们在 Python 中写日志,使用的是 Python 自带的 logging 模块,要实现既在终端输出,又能写文件,并且日志文件还能 rotate ,代码需要十多行:

import logging
from logging.handlers import RotatingFileHandler
os.makedirs('Logs', exists_ok=True)
logger = logging.getLogger('Robot')
handler = logging.StreamHandler()
handler.setLevel(logging.DEBUG)
file_handler = RotatingFileHandler(os.path.join('Logs', 'robot.log'),
maxBytes=5 * 1024 * 1024,
backupCount=10,
encoding='utf-8')
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)
file_handler.setFormatter(formatter)
logger.addHandler(handler)
logger.addHandler(file_handler)
logger.setLevel(logging.DEBUG)
logger.info('终于可以写日志了...')

那有没有什么简单好用,for human的写日志方案呢?

当然有,那就是使用loguru[1]这个模块。

它有多好用呢?我们用一段代码来演示:

from loguru import logger
logger.add('logs/z_project.log',
           level='DEBUG',
           format='{time:YYYY-MM-DD HH:mm:ss} - {level} - {file} - {line} - {message}',
           rotation="10 MB")
logger.info('可以写日志了')

不需要提前创建文件夹。不需要设置奇奇怪怪的handler

甚至你可以直接把它当做装饰器使用,当一个函数报错的时候,自动记录日志:

from loguru import logger
@logger.catch
def test():
    'a' + 1

函数报错时,自动记录报错信息到日志中。

他记录的报错信息有多准确呢?我们来看这个图:

每个变量的值都给你标出来了。

使用 loguru 也只需要定义一次格式。只需要在入口文件定义好格式,在同一个项目中的其他文件中,直接

from loguru import logger
logger.info('可以用了')
相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
2天前
|
消息中间件 Kafka API
python之kafka日志
python之kafka日志
|
1天前
|
Python
5-9|Python获取日志
5-9|Python获取日志
|
4月前
|
C++ 开发者 Python
实现Python日志点击跳转到代码位置的方法
本文介绍了如何在Python日志中实现点击跳转到代码位置的功能,以提升调试效率。通过结合`logging`模块的`findCaller()`方法记录代码位置信息,并使用支持点击跳转的日志查看工具(如VS Code、PyCharm),开发者可以从日志直接点击链接定位到出错代码,加快问题排查。
76 2
|
18天前
|
开发者 Python
基于Python的日志管理与最佳实践
日志是开发和调试过程中的重要工具,然而,如何高效地管理和利用日志常常被忽略。本文通过Python中的logging模块,探讨如何使用日志来进行调试、分析与问题排查,并提出了一些实际应用中的优化建议和最佳实践。
|
1天前
|
Python
Python如何将日志输入到文件里
Python如何将日志输入到文件里
|
3天前
|
Python
python之日志基础班
python之日志基础班
|
30天前
|
消息中间件 安全 Python
Python日志管理之Loguru
Python日志管理之Loguru
|
1月前
|
存储 程序员 开发者
Python|日志记录详解(1)
Python|日志记录详解(1)
32 0
Python|日志记录详解(1)
|
1月前
|
消息中间件 JSON 自然语言处理
Python多进程日志以及分布式日志的实现方式
python日志模块logging支持多线程,但是在多进程下写入日志文件容易出现下面的问题: PermissionError: [WinError 32] 另一个程序正在使用此文件,进程无法访问。 也就是日志文件被占用的情况,原因是多个进程的文件handler对日志文件进行操作产生的。
|
1月前
|
数据采集 机器学习/深度学习 数据挖掘
如何使用 Python 统计分析 access 日志?
【8月更文挑战第14天】如何使用 Python 统计分析 access 日志?
36 0
如何使用 Python 统计分析 access 日志?