Python的loguru包将日志直接写入腾讯云的日志服务

背景

手里有一个Python项目,使用loguru包记录输出日志,之前为了简单化,直接将日志写到了本地的log文件里,程序启动后使用docker管理,每次查看日志都需要链接到服务器上去,着实不太方便。因此将基于loguru进行改造,将日志直接输出到腾讯云的日志服务上去。

腾讯云日志服务

地址:日志服务_ 日志服务平台_日志数据分析-腾讯云 (tencent.com)

技术文档:日志服务 使用 Kafka 协议上传日志-操作指南-文档中心-腾讯云 (tencent.com) 我使用的是Python的SDK,点进技术文档页面,下滑到Python模块即可 参考:

python 复制代码
from kafka import KafkaProducer

if __name__ == '__main__':
    produce = KafkaProducer(
        # TODO 服务地址;外网端口9096,内网端口9095
        bootstrap_servers=["${region}-producer.cls.tencentyun.com:9095"],
        security_protocol='SASL_PLAINTEXT',
        sasl_mechanism='PLAIN',
        # TODO 日志集 ID
        sasl_plain_username='${logsetID}',
        # TODO 格式为 ${SecurityId}#${SecurityKey}, 若要匿名写入,格式为 topic_id#${日志主题 ID} 
        sasl_plain_password='${SecurityId}#${SecurityKey}',
        api_version=(0, 11, 0),
        # TODO 配置压缩方式
        compression_type="${compress_type}",
    )

    for i in range(0, 5):
        # 发送消息 TODO 日志主题ID
        future = produce.send(topic="${topicID}", value=b'python sdk sender demo')
        result = future.get(timeout=10)
        print(result)

可能会用到地域配置的URL地址,参考:日志服务 地域和访问域名-产品简介-文档中心-腾讯云 (tencent.com)

使用kafka上报,切换到「kafka上报日志」栏目查看

注意:具体如何使用和购买日志服务,以及基础的配置,不是本文的重点,在此忽略,网上搜索或者查看腾讯云的技术文档,应该不难实现。

Python实现

首先我们单独创建一个Python文件用来测试,代码参考:

python 复制代码
from kafka import KafkaProducer
from loguru import logger
def handleCLS(message):
    produce = KafkaProducer(
        # TODO 服务地址;外网端口9096,内网端口9095
        bootstrap_servers=["${region}-producer.cls.tencentyun.com:9095"],
        security_protocol='SASL_PLAINTEXT',
        sasl_mechanism='PLAIN',
        # TODO 日志集 ID
        sasl_plain_username='${logsetID}',
        # TODO 格式为 ${SecurityId}#${SecurityKey}, 若要匿名写入,格式为 topic_id#${日志主题 ID} 
        sasl_plain_password='${SecurityId}#${SecurityKey}',
        api_version=(0, 11, 0),
        # TODO 配置压缩方式
        compression_type="${compress_type}",
    )

    # 发送消息 TODO 日志主题ID
    future = produce.send(topic="${topicID}", value=bytes(str(message),"utf-8"))
    result = future.get(timeout=10)
    print(result)
        
if __name__ == '__main__':
    logger.debug("debug1")
    logger.add(handleCLS, serialize=True,level="DEBUG") # 开启JSON输出,等级为DEBUG
    logger.debug("debug2")

运行代码之前,需要确认安装loguru包和kafka-python包

shell 复制代码
pip3 install kafka-python loguru

安装完成后,将代码里的一些配置参数替换成自己的配置参数后,运行即可将 "debug2" 字符串以kafka上报的方式报到腾讯云的cls

handleCLS函数的形参是一个loguru._handler.Message的class,可使用str(message)将其转换为字符串,由于在logger.add阶段已经指定了将记录的消息转换为 JSON 字符串,因此此处也是以JSON字符串的形式将日志上报。

相关推荐
LSTM9722 分钟前
使用 Python 将图片转换为 PDF (含合并)
后端
小江的记录本23 分钟前
【注解】常见 Java 注解系统性知识体系总结(附《全方位对比表》+ 思维导图)
java·前端·spring boot·后端·spring·mybatis·web
小飞Coding31 分钟前
MyBatis Mapper 实现原理彻底解密——从动态代理到 JDBC 执行全链路剖析
后端·mybatis
老李的勺子34 分钟前
Agent 记忆失效的 5 种方式:完整排查复盘
python·llm
Mr.456742 分钟前
Spring Boot 集成 PostgreSQL 表级备份与恢复实战
java·spring boot·后端·postgresql
LucianaiB42 分钟前
王炸组合!腾讯云 OpenClaw X 飞书 CLI,开启 Agent 基建狂潮!
后端
白露与泡影1 小时前
探索springboot程序打包docker的最佳方式
spring boot·后端·docker
开心就好20251 小时前
本地执行 IPA 混淆 无需上传致云端且不修改工程的方案
后端·ios
Leo655351 小时前
动态透视报表 + 查询接口 + Excel导出
开发语言·windows·python
清水白石0081 小时前
pytest Fixture 设计实战指南:作用域、依赖链、自动清理与测试资源高效复用
python·pytest