python 自动上报json信息_使用Python Log Handler自动上传并解析JSON格式的日志-阿里云开发者社区...

概述

使用Python SDK提供的Log Handler可以实现每一条Python程序的日志在不落盘的情况下自动上传到日志服务上。与写到文件再通过各种方式上传比起来,有如下优势:

实时性:主动直接发送,不落盘

吞吐量大,异步发送

配置简单:无需修改程序,无需知道机器位置,修改程序配置文件即可生效

智能解析: 自动解析日志中JSON和KV格式信息

本篇主要如何打开自动解析JSON格式的功能, 关于如何配置并使用的基本信息, 请参考使用Log Handler自动上传Python日志

解决的问题

在程序中, 有时我们需要将特定数据输出到日志中以便跟踪, 例如:

data = {'name':u"小明", 'score': 100.0}

一般情况下, 我们可以直接输出数据, 如下:

response_data = {'name':u'小明', 'score': 100.0}

logger.info(response_data)

这样会输出的消息为:

{'name':u'小明', 'score': 100.0}

因为Python格式化的原因, 数据的字符串形式并不是真正的JSON格式. 并且我们期望在上传到日志服务时可以自动解析出域name和score字段. 使用Python Handler的简单配置即可做到. 如下.

通过Logging的配置文件

args=(os.environ.get('ALIYUN_LOG_SAMPLE_ENDPOINT', ''), os.environ.get('ALIYUN_LOG_SAMPLE_ACCESSID', ''), os.environ.get('ALIYUN_LOG_SAMPLE_ACCESSKEY', ''), os.environ.get('ALIYUN_LOG_SAMPLE_TMP_PROJECT', ''), "logstore", None, None, None, None, None, None, None, None, True)

最后一个参数对应了Logging Handler的详细参数的extract_json参数.

注意, 受限于Python Logging的限制, 这里只能用无名参数, 依次传入. 对于不改的参数, 用None占位.

通过代码以JSON形式配置

如果期望更加灵活的配置, 也可以使用代码配置, 如下将参数extract_json设置为True即可.

#encoding: utf8

import logging, logging.config, os

# 配置

conf = {'version': 1,

'formatters': {'rawformatter': {'class': 'logging.Formatter',

'format': '%(message)s'}

},

'handlers': {'sls_handler': {'()':

'aliyun.log.QueuedLogHandler',

'level': 'INFO',

'formatter': 'rawformatter',

# custom args:

'end_point': os.environ.get('ALIYUN_LOG_SAMPLE_ENDPOINT', ''),

'access_key_id': os.environ.get('ALIYUN_LOG_SAMPLE_ACCESSID', ''),

'access_key': os.environ.get('ALIYUN_LOG_SAMPLE_ACCESSKEY', ''),

'project': 'project1',

'log_store': "logstore1",

'extract_json': True

}

},

'loggers': {'sls': {'handlers': ['sls_handler', ],

'level': 'INFO',

'propagate': False}

}

}

logging.config.dictConfig(conf)

# 使用

logger = logging.getLogger('sls')

response_data = {'name':u'小明', 'score': 100.0}

logger.info(response_data)

域名冲突

当关键字和内置日志域冲突时, 需要做一些调整, 例如:

c1 = 'student="xiao ming" level=3'

这里的level和日志域的内建表示日志级别冲突了, 可以通过参数buildin_fields_prefix / buildin_fields_suffix给系统日志域添加前缀后缀;

或者通过参数extract_json_prefix和extract_json_suffix给抽取的域添加前缀后缀来解决.

其他定制参数

自动抽取KV也支持更多其他相关参数如下:

参数

作用

默认值

extract_json

是否自动解析KV

False

extract_json_drop_message

匹配KV后是否丢弃掉默认的message域

False

extract_json_prefix

给解析的域添加前缀

空串

extract_json_suffix

给解析的域添加后缀

空串

buildin_fields_prefix

给系统域添加前缀

空串

buildin_fields_suffix

给系统域添加后缀

空串

进一步参考

扫码加入官方钉钉群 (11775223):

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值