loguru是Python开发的,更加优雅、简单的日志的输出工具。
安装
pip3 install loguru
pip install loguru -i https://mirrors.aliyun.com/pypi/simple/
使用
基本使用
from loguru import logger
logger.debug('debug hello world')
logger.debug('this is a debug message')
logger.info('this is another debug message')
logger.warning('this is another debug message')
logger.error('this is another debug message')
logger.info('this is another debug message')
logger.success('this is success message!')
logger.critical('this is critical message!')
2023-05-14 18:27:44.403 | DEBUG | __main__:<module>:1 - debug hello world
...
输出到文件
from loguru import logger
# logger.add("file_{time}.log")
日志轮转/压缩
from loguru import logger
# 每天 12:00 会创建一个新的文件
logger.add("file_{time}.log", rotation="12:00")
# 按周
logger.add('file_{time}.log', rotation='1 week')
# 按大小
logger.add("file_{time}.log", rotation="1 MB", compression="zip", enqueue=True)
logger.debug("That's it, beautiful and simple logging!")
支持 Backtrace
from loguru import logger
# Caution, may leak sensitive data in prod
logger.add("file_{time}.log", backtrace=True, diagnose=True)
def func(a, b):
return a / b
def nested(c):
try:
func(5, c)
except ZeroDivisionError:
logger.exception("What?!")
nested(0)
2023-05-14 18:35:31.069 | ERROR | __main__:nested:5 - What?!
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
> File "<stdin>", line 3, in nested
File "<stdin>", line 2, in func
ZeroDivisionError: division by zero
邮件告警
使用 notifiers 模块当发生 ERROR 级别告警时,发送邮件提醒
import notifiers
from loguru import logger
from notifiers.logging import NotificationHandler
params = {
"username": "from@gmail.com",
"password": "iampassword",
"to": "to@gmail.com"
}
# 初始化时发送一封邮件
notifier = notifiers.get_notifier("gmail")
notifier.notify(message="The application is running!", **params)
# 发生 Error 日志时,发邮件进行警报
handler = NotificationHandler("gmail", defaults=params)
logger.add(handler, level="ERROR")
自定义格式
from loguru import logger
# 配置重定向路径&格式
logger.add('file_{time}.log',format='{level} {time} {message}')
logger.debug('this is a redirect to file message')
from loguru import logger
logger.add("file.log", format="{extra[ip]} {extra[user]} {message}")
context_logger = logger.bind(ip="192.168.0.1", user="someone")
context_logger.info("Contextualize your logger easily")
context_logger.bind(user="someone_else").info("Inline binding of extra attribute")
context_logger.info("Use kwargs to add context during formatting: {user}", user="anybody")