RapidOCR API日志添加时间戳的技术实现

RapidOCR API日志添加时间戳的技术实现

RapidOCR A cross platform OCR Library based on PaddleOCR & OnnxRuntime & OpenVINO. RapidOCR 项目地址: https://gitcode.com/gh_mirrors/ra/RapidOCR

背景介绍

在RapidOCR项目的API服务开发过程中,日志记录是系统监控和问题排查的重要工具。原始的API日志输出缺少时间戳信息,这给日志分析和问题定位带来了不便。本文将详细介绍如何在FastAPI框架下为RapidOCR API服务添加时间戳功能。

技术原理

FastAPI底层使用Uvicorn作为ASGI服务器,而Uvicorn的日志格式可以通过配置进行自定义。通过修改Uvicorn的默认日志处理器配置,我们可以为每条日志添加时间戳信息。

实现方案

在RapidOCR API项目中,我们通过以下步骤实现了日志时间戳功能:

  1. 修改Uvicorn配置:在启动Uvicorn服务器时,通过log_config参数传入自定义的日志配置字典。

  2. 自定义日志格式:在日志格式字符串中加入时间占位符%(asctime)s,并指定时间格式。

  3. 保留原有信息:在添加时间戳的同时,保留了原有的日志级别、模块名和消息内容。

具体实现代码

在RapidOCR API的启动脚本中,我们添加了如下配置:

log_config = {
    "version": 1,
    "disable_existing_loggers": False,
    "formatters": {
        "default": {
            "()": "uvicorn.logging.DefaultFormatter",
            "fmt": "%(asctime)s - %(levelprefix)s %(message)s",
            "datefmt": "%Y-%m-%d %H:%M:%S",
            "use_colors": None,
        },
        "access": {
            "()": "uvicorn.logging.AccessFormatter",
            "fmt": '%(asctime)s - %(levelprefix)s %(client_addr)s - "%(request_line)s" %(status_code)s',
            "datefmt": "%Y-%m-%d %H:%M:%S",
        },
    },
    "handlers": {
        "default": {
            "formatter": "default",
            "class": "logging.StreamHandler",
            "stream": "ext://sys.stderr",
        },
        "access": {
            "formatter": "access",
            "class": "logging.StreamHandler",
            "stream": "ext://sys.stdout",
        },
    },
    "loggers": {
        "uvicorn": {"handlers": ["default"], "level": "INFO"},
        "uvicorn.error": {"level": "INFO"},
        "uvicorn.access": {"handlers": ["access"], "level": "INFO", "propagate": False},
    },
}

效果展示

修改后的日志输出格式如下:

2024-12-26 15:30:45 - INFO Started server process [1234]
2024-12-26 15:30:45 - INFO Waiting for application startup.
2024-12-26 15:30:45 - INFO Application startup complete.
2024-12-26 15:30:45 - INFO Uvicorn running on http://0.0.0.0:9003

技术价值

  1. 提高可追溯性:时间戳使得每条日志都有明确的时间标记,便于追踪问题发生的时间点。

  2. 统一日志格式:标准化的日志格式有利于日志收集和分析系统的处理。

  3. 便于监控:时间序列化的日志更易于与监控系统集成,实现基于时间的日志分析。

最佳实践建议

  1. 时区设置:在Docker容器中运行时,建议设置TZ环境变量确保时间戳使用正确的时区。

  2. 日志轮转:对于长期运行的服务,应考虑配置日志轮转策略,避免日志文件过大。

  3. 日志级别管理:根据实际需求调整不同模块的日志级别,平衡信息量和性能开销。

总结

通过为RapidOCR API服务添加时间戳功能,我们显著提升了日志系统的实用性和可维护性。这一改进虽然看似简单,但对于生产环境中的问题诊断和系统监控具有重要意义。开发者可以根据实际需求进一步定制日志格式,如添加进程ID、请求ID等信息,构建更加完善的日志系统。

RapidOCR A cross platform OCR Library based on PaddleOCR & OnnxRuntime & OpenVINO. RapidOCR 项目地址: https://gitcode.com/gh_mirrors/ra/RapidOCR

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

邹冉琼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值