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

相关推荐
2601_96288572几秒前
如何用 Python 做股价历史分位选股?(筛出处于历史低位的股票)
开发语言·python
倔强的石头1064 分钟前
【Linux指南】动静态库系列(十一):PLT 与延迟绑定:第一次调用动态库函数时发生了什么
linux·人工智能·python
梦帮科技9 分钟前
vLLM / TensorRT-LLM 极限推理:PagedAttention 细粒度物理页表管理与连续批处理(Continuous Batching)实战
数据结构·人工智能·分布式·python·深度学习·算法·vllm
言乐61 小时前
Python概括后端原理
开发语言·python·django·virtualenv·pygame
Y3815326621 小时前
搜索 API 响应模块:featured_snippet、PAA 与 knowledge_graph 怎么用
python·搜索引擎
谢亮_vipxieliang2 小时前
Spring Boot 自动配置原理:从 @SpringBootApplication 到自定义 Starter
java·spring boot·后端
10年前端老司机2 小时前
实战分享:基于 PyMuPDF+Qwen-VL 实现图文兼容的 PDF RAG 方案
人工智能·python·agent
2601_962885722 小时前
如何用 Python 回测定投策略(定期定额 DCA)?(和一次性买入对比)
开发语言·人工智能·python
蜗牛互联网2 小时前
Python接入Gemini 3.8 Flash实现票据视觉抽取与规则校验
java·javascript·网络·人工智能·python
我的div丢了肿么办2 小时前
go语言中的空接口和类型断言
后端·go