python使用loguru入门

自定义json格式

from loguru import logger
import json
from datetime import datetime
import inspect

# 定义一个函数来创建 JSON 格式的日志
def json_log(level, message, **kwargs):
    # 获取当前的堆栈信息
    frame = inspect.currentframe()
    # 向上追溯到调用者的帧
    caller_frame = frame.f_back
    # 获取调用者的帧信息
    info = inspect.getframeinfo(caller_frame)
    # 创建一个包含所有日志信息的字典
    log_entry = {
        "time": datetime.now().isoformat(),
        "level": level.upper(),
        "message": message,
        "file": info.filename,
        "function": info.function,
        "line": info.lineno,
        "details": kwargs  # 将任何额外的关键字参数添加到 details 字典中
    }

    # 序列化整个字典为 JSON 字符串并记录
    logger.log(level, json.dumps(log_entry))


# 设置 Loguru 的配置
logger.add("logs/{time:YYYY-MM-DD}.log", rotation="1 day", retention="10 days", format="{message}")

# 使用 json_log 函数记录不同级别的日志
json_log("ERROR", "This is an error message", error_code=500, user="JaneDoe")

复杂点的

from loguru import logger

# format:表示日志格式化。{level:8}</>表示按照日志级别显示颜色。8表示输出宽度为8个字符。
# colorize: True**:表示显示颜色。
# 当前文件的目录路径
#dir_path = os.path.abspath(os.path.dirname(__file__))
# 日志路径
#log_file_path = os.path.join(dir_path, 'loguru_{time:%Y-%m-%d}.log')
# 配置日志输出到文件,输出最低等级为info,格式自定义
# 设置每天 0 点新创建一个 log 文件:json格式,并发安全
# logger.add(log_file_path, format="{time} {level} {message}", level="INFO",rotation='00:00',encoding='utf-8',enqueue=True)
# logger.debug('debug msg')
# logger.info('info msg')
# 设置超过 500 MB 新创建一个 log 文件:
# logger.add('runtime_{time}.log', rotation="500 MB")
# 设置每隔一个周新创建一个 log 文件:
# logger.add('runtime_{time}.log', rotation='1 week')

# 可以放配置内,这里单独提出来
folder_ = "./"
prefix_ = "loguru-"
rotation_ = "00:00"
retention_ = "7 days"
encoding_ = "utf-8"
backtrace_ = False  #记录堆栈
diagnose_ = False  #记录诊断信息

# 格式里面添加了process和thread记录,方便查看多进程和线程程序
format_ = '<green>{time:YYYY-MM-DD HH:mm:ss}</green> | <level>{level: <8}</level> ' \
            '| <magenta>{process}</magenta>:<yellow>{thread}</yellow> ' \
            '| <cyan>{name}</cyan>:<cyan>{function}</cyan>:<yellow>{line}</yellow> - <level>{message}</level>'

# 这里面采用了层次式的日志记录方式,就是低级日志文件会记录比他高的所有级别日志,这样可以做到低等级日志最丰富,高级别日志更少更关键
logger.add(folder_ + prefix_ + "{time:%Y-%m-%d}.log", level="INFO", backtrace=backtrace_, diagnose=diagnose_,
            format=format_, colorize=False,
            rotation=rotation_, retention=retention_, encoding=encoding_,
            filter=lambda record: record["level"].no >= logger.level("INFO").no)
#测试打印日志
logger.info('info msg')
posted @ 2024-11-12 11:58  朝阳1  阅读(8)  评论(0编辑  收藏  举报