Skip to content
On this page

use-logger

bash
pip install use-logger
bash
poetry add use-logger

loguru是一个十分优秀的日志库,但是大部分第三方库都是使用logging模块来进行日志记录的,当项目中同时使用了logurulogging时,会导致日志记录混乱。

useLogger就是为了解决这个问题而生的,它可以将logging模块的日志记录转换为loguru的日志记录。并且能够统一格式输出。

当你在项目入口处使用useLogger后,你可以在任何地方使用logging/loguru模块来进行日志记录,它们统统会被无感转换为loguru的日志记录。

使用

python
from use_logger import useLogger

useLogger() # 使用默认配置

如果你自身项目正在使用loguru,这一切似乎感觉毫无变化。因为默认的配置只是修改了一点输出样式。

如果想要感受它带来的“魔法”,需要稍微配置一下。

python
from use_logger import useLogger

useLogger(packages=["scrapy", "django", "usepy"])

如果你在使用如scrapy/django等第三方库时,你会发现它们的日志记录也被统一了。

晚一些时候,这里会提供演示。

Logstash/Filebeat

日志的更重要能力是将日志记录发送到Logstash/Filebeat,这样就可以将日志记录存储到Elasticsearch中,方便进行日志分析。所以统一日志的最终输出格式是非常重要的。

useLogger内置一个logstash_handler统一化输出格式。

python
from usepy import useTimeIt
from use_logger import useLogger
from use_logger.handlers import logstash_handler

useLogger(
    handlers=[
        logstash_handler(level="DEBUG", extra={"app_name": "spider"})
    ],
    packages=["usepy"],  # hook拦截 usepy 的日志
    extra={"project_name": "usepy"}
)

logger.warning("test warning")
logger.info("test info")
logger.debug("test debug")
# 这里测试调用函数的耗时,这是一个在usepy包中的函数
useTimeIt(lambda: logger.debug("start run test function"))()

运行结果:

有了以上输出,如果你使用过类似filebeat的工具,你就可以通过它自动收集docker的日志产物,发往elasticsearch中,方便进行日志分析。

另类模块

uvicorn

uvicorn是一个非常优秀的ASGI服务器。它是fastapi的最佳拍档。它的日志拦截稍微特殊,我们将它单独拿出来。

python
# app.py
from fastapi import FastAPI
from use_logger import useLoggerInterceptUvicorn

useLoggerInterceptUvicorn()  # 在 app 实例化前调用即可

app = FastAPI()

@app.get("/")
def home():
    return {"message": "hello"}
python
# main.py
import uvicorn

uvicorn.run(app="app:app", host="127.0.0.1")

兼容性

useLogger兼容logurulogging模块,你可以在任何地方使用它们来进行日志记录。

当你需要其他handler时,可以使用loguruadd方法来添加。

python
from loguru import logger
from use_logger import useLogger

useLogger()

logger.add(
    "file_{time}.log",
    rotation="00:00",
    retention="10 days",
    enqueue=True,
    encoding="utf-8",
    level="DEBUG",
)
text
# file_2023-02-28_22-26-56_570490.log
2023-02-28 22:26:56.590 | WARNING  | __main__:<module>:50 - test warning
2023-02-28 22:26:56.593 | INFO     | __main__:<module>:51 - test info
2023-02-28 22:26:56.593 | DEBUG    | __main__:<module>:52 - test debug
2023-02-28 22:26:56.593 | DEBUG    | __main__:<lambda>:53 - start run test function
2023-02-28 22:26:56.594 | DEBUG    | usepy.decorator.timeit:_timer:18 - <lambda> took 0 seconds

Released under the MIT License.