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

相关推荐
巴里巴气1 小时前
selenium基础知识 和 模拟登录selenium版本
爬虫·python·selenium·爬虫模拟登录
19891 小时前
【零基础学AI】第26讲:循环神经网络(RNN)与LSTM - 文本生成
人工智能·python·rnn·神经网络·机器学习·tensorflow·lstm
martinzh1 小时前
Spring AI 项目介绍
后端
JavaEdge在掘金1 小时前
Redis 数据倾斜?别慌!从成因到解决方案,一文帮你搞定
python
ansurfen1 小时前
我的第一个AI项目:从零搭建RAG知识库的踩坑之旅
python·llm
前端付豪1 小时前
20、用 Python + API 打造终端天气预报工具(支持城市查询、天气图标、美化输出🧊
后端·python
爱学习的小学渣1 小时前
关系型数据库
后端
武子康1 小时前
大数据-33 HBase 整体架构 HMaster HRegion
大数据·后端·hbase
前端付豪1 小时前
19、用 Python + OpenAI 构建一个命令行 AI 问答助手
后端·python
凌览1 小时前
斩获 27k Star,一款开源的网站统计工具
前端·javascript·后端