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

相关推荐
喵手26 分钟前
Python爬虫实战:小红书热门笔记爬虫实战 - 搜索关键词驱动的内容采集指南!
爬虫·python·爬虫实战·零基础python爬虫教学·小红书热门笔记·搜索关键词·采集小红书热门笔记数据
callJJ29 分钟前
Spring Bean 生命周期详解——从出生到销毁,结合源码全程追踪
java·后端·spring·bean·八股文
怒放吧德德31 分钟前
AsyncTool + SpringBoot:轻量级异步编排最佳实践
java·后端
nita张1 小时前
战略定位实战:案例分享与经验总结
大数据·人工智能·python
毅炼1 小时前
Java 集合常见问题总结(1)
java·后端
utmhikari1 小时前
【架构艺术】治理后端稳定性的一些实战经验
java·开发语言·后端·架构·系统架构·稳定性·后端开发
undefinedType1 小时前
Rails ActiveSupport::Cache 缓存存储详解
后端
MadPrinter1 小时前
Python 异步爬虫实战:FindQC 商品数据爬取系统完整教程
爬虫·python·算法·自动化
清水白石0081 小时前
Python 函数式编程实战:从零构建函数组合系统
开发语言·python
茶杯梦轩2 小时前
从零起步学习并发编程 || 第二章:多线程与死锁在项目中的应用示例
java·服务器·后端