背景
手里有一个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字符串的形式将日志上报。