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字符串的形式将日志上报。

相关推荐
love530love30 分钟前
LiveTalking 数字人项目 Windows 部署完全指南(EPGF 架构)
人工智能·windows·python·架构·livetalking·epgf
遇事不決洛必達38 分钟前
【Python基础】GIL 锁是什么及其对爬虫的影响
爬虫·python·线程·进程·gil锁
星辰徐哥42 分钟前
Spring Boot 微服务架构设计与实现
spring boot·后端·微服务
星辰徐哥42 分钟前
Spring Boot 数据导入导出与报表生成
spring boot·后端·ui
明夜之约43 分钟前
Spring Boot 自动装配源码
java·spring boot·后端
Leaton Lee44 分钟前
Spring Boot分层架构详解:从Controller到Service再到Mapper的完整流程
java·spring boot·后端·架构
Micro麦可乐1 小时前
Spring Boot 实战:从零设计一个短链系统(含完整代码与数据库设计)
数据库·spring boot·后端·哈希算法·雪花算法·短链系统
Jinkxs1 小时前
Resilience4j- 与 Spring Boot 快速集成:自动配置与基础注解使用
java·spring boot·后端
毕设源码_郑学姐1 小时前
计算机毕业设计springboot网络相册设计与实现 基于Spring Boot框架的在线相册管理系统开发与应用 Spring Boot驱动的网络影集设计与实践
spring boot·后端·课程设计
辣机小司1 小时前
【踩坑记录:Spring Boot 配置文件读取值不一致?警惕 YAML 的“八进制陷阱”与 SnakeYAML 版本之谜】
java·spring boot·后端·yaml·踩坑记录