使用Python Log Handler自动上传并解析JSON格式的日志

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,恶意文件检测 1000次 1年
对象存储 OSS,内容安全 1000次 1年
简介: Python Logging Handler可以无需写代码自动高效上传日志, 对JSON格式还可以自动解析字段. 本文介绍如何简单配置.

概述

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

  1. 实时性:主动直接发送,不落盘
  2. 吞吐量大,异步发送
  3. 配置简单:无需修改程序,无需知道机器位置,修改程序配置文件即可生效
  4. 智能解析: 自动解析日志中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格式. 并且我们期望在上传到日志服务时可以自动解析出域namescore字段. 使用Python Handler的简单配置即可做到. 如下.

通过Logging的配置文件

参考Logging Handler的详细配置, 将其中参数列表修改为:

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_prefixextract_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):
    image
相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
22天前
|
Java
使用Java代码打印log日志
使用Java代码打印log日志
76 1
|
23天前
|
Linux Shell
Linux手动清理Linux脚本日志定时清理日志和log文件执行表达式
Linux手动清理Linux脚本日志定时清理日志和log文件执行表达式
77 1
|
27天前
|
SQL 关系型数据库 MySQL
MySQL数据库,可以使用二进制日志(binary log)进行时间点恢复
对于MySQL数据库,可以使用二进制日志(binary log)进行时间点恢复。二进制日志是MySQL中记录所有数据库更改操作的日志文件。要进行时间点恢复,您需要执行以下步骤: 1. 确保MySQL配置文件中启用了二进制日志功能。在配置文件(通常是my.cnf或my.ini)中找到以下行,并确保没有被注释掉: Copy code log_bin = /path/to/binary/log/file 2. 在需要进行恢复的时间点之前创建一个数据库备份。这将作为恢复的基准。 3. 找到您要恢复到的时间点的二进制日志文件和位置。可以通过执行以下命令来查看当前的二进制日志文件和位
|
2天前
|
Java
log4j异常日志过滤规则配置
log4j异常日志过滤规则配置
11 0
|
14天前
|
运维 安全 Ubuntu
`/var/log/syslog` 和 `/var/log/messages` 日志详解
`/var/log/syslog` 和 `/var/log/messages` 是Linux系统的日志文件,分别在Debian和Red Hat系发行版中记录系统事件和错误。它们包含时间戳、日志级别、PID及消息内容,由`rsyslog`等守护进程管理。常用命令如`tail`和`grep`用于查看和搜索日志。日志级别从低到高包括`debug`到`emerg`,表示不同严重程度的信息。注意保护日志文件的安全,防止未授权访问,并定期使用`logrotate`进行文件轮转以管理磁盘空间。
19 1
|
15天前
|
网络协议 应用服务中间件 Linux
centos7 Nginx Log日志统计分析 常用命令
centos7 Nginx Log日志统计分析 常用命令
27 2
|
15天前
|
Ubuntu Linux 网络安全
/var/log/auth.log日志详解
`/var/log/auth.log`是Linux(尤其是Debian系如Ubuntu)记录身份验证和授权事件的日志文件,包括登录尝试(成功或失败)、SSH活动、sudo使用和PAM模块的操作。登录失败、SSH连接、sudo命令及其它认证活动都会在此记录。查看此日志通常需root权限,可使用`tail`、`less`或`grep`命令。文件内容可能因发行版和配置而异。例如,`sudo tail /var/log/auth.log`显示最后几行,`sudo grep "failed password" /var/log/auth.log`搜索失败密码尝试。
63 8
|
7天前
yolo-world 源码解析(六)(2)
yolo-world 源码解析(六)
18 0
|
7天前
yolo-world 源码解析(六)(1)
yolo-world 源码解析(六)
12 0
|
8天前
yolo-world 源码解析(五)(4)
yolo-world 源码解析(五)
19 0

相关产品

  • 日志服务
  • 推荐镜像

    更多