AI基础04-日志数据采集
上篇文章我们学习了视频的数据采集,今天主要了解一下日志数据采集的方法。日志数据采集的目的通常是:调试、运维监控和业务分析。调试主要是工程师在程序异常时针对关键环节把相关参数通过日志打印出来,找出哪个环节出现了问题。运维监控主要是监控系统运行的负载、并发性能以及消耗时间等指标。通过日志可以记录用户的每一次操作,以及相关维度信息,有了这些数据就可以做一些运营分析,如访问量、用户转化、留存分析等。
1、基础知识准备
1)日志数据
日志-log 数据记录的是信息系统产生的过程性事件数据。通过查看日志数据,管理员可以了解哪个用户什么时间在哪台设备使用了什么应用系统做了什么具体的操作。
2)日志组成
日志由日期、信息、等级三要素组成。日志的等级如下:
|
| |||||||
| 致命 | 错误 | 警告 | 信息 | 调试 | 痕迹 | 全部 | |
| OFF | |||||||
| 致命 | X | ||||||
| 错误 | X | X | |||||
| 警告 | X | X | X | ||||
| 信息 | X | X | X | X | |||
| 调试 | X | X | X | X | X | ||
| 痕迹 | X | X | X | X | X | X | |
| 全部 | X | X | X | X | X | X | X |
- OFF:最高等级,用于关闭所有日志记录。
- FATAL:严重错误级别,表示系统无法继续运行。
- ERROR:错误级别,用于记录错误信息。
- WARN:警告级别,表示潜在的问题,但不影响程序的运行。
- INFO:信息级别,用于记录程序的正常运行信息。
- DEBUG:调试级别,用于详细记录调试信息。
- TRACE:追踪级别,提供比DEBUG更详细的信息。
- ALL:最低级别,用于启用所有日志记录。
即如上表所示,将日志设置在某一个等级上,那么比此等级优先级高的日志都能被输出。
例如,如果设置为WARN,那么FATAL、ERROR、WARN 、OFF 4个等级的日志都能被输出。
3)Logging库
在Python中,logging 模块是内置的,用于记录程序的运行日志。它可以非常灵活地配置,以满足不同场景的需求,例如记录到文件、控制台、通过网络发送日志等。
Logging 库包括Logger(日志采集器)、Handler(日志处理器)、Filter(日志处理器)、Formatter(日志各式器)4个组件。
日志模块最常用的类:
Logger:公开了一个接口,代码通过使用该接口记录日志消息。即用采集器采集日志。
Handler:处理器,将logger创建的日志发送到目的地(控制台或文件)。常用的处理程序包括:
FileHandler:用于将日志消息发送到文件
StreamHandler:用于向输出流(如stdout)发送日志消息
SyslogHandler:用于向syslog守护进程发送日志消息
HTTPHandler:用于使用HTTP协议发送日志消息
Filter:过滤器,提供一种机制来确定记录哪些日志。
Formatter:格式器,决定日志消息的输出格式。
A、Logger类
Logger类是入口,使用模块级别函数 logging.getLogger(name) 实例化,最终由Handler来对日志进行处理,Handler会调用Filter和Formatter来对日志进行过滤和格式化。
import logging
logger = logging.getLogger('mylogger')
logger.debug('Debug 级别日志信息')
logger.info('Info 级别日志信息')
logger.warning('Warning 级别日志信息')
logger.error('Error 级别日志信息')
logger.critical('Critical 级别日志信息')
自定义logger不能使用 basicConfig() 来配置,需要使用 处理器(Handler)和 格式器(Formatter)来配置。
B、处理器
可以使用处理器(Handler)来配置自定义logger将日志保存到文件、输出到控制台、通过HTTP发送或者通过邮件发送。
处理器也可以设置日志严重级别,为文件处理器(FileHandler)和控制台处理器(StreamHandler)设置不同的日志级别。
# 创建处理器 handlers
console_handler = logging.StreamHandler() # 输出到控制台
file_handler = logging.FileHandler(logname) # 输出到文件
console_handler.setLevel(logging.WARNING)
file_handler.setLevel(logging.ERROR)
C、格式器
格式器(Formatter)用来配置格式化输出。
# 创建格式器
console_format = logging.Formatter('%(name)s - %(levelname)s - %(message)s', '%Y%m%d-%H:%M:%S')
file_format = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s', '%Y%m%d-%H:%M:%S')
C、过滤器
过滤器(Filter)可实现日志过滤操作,
import logging
import sys
import os
class failureFilter(logging.Filter):
def filter(self, record):
if 'Failure' in record.msg:
return True
return False
logger = logging.getLogger(__name__)
console_handler = logging.StreamHandler(stream=sys.stdout) # 输出到控制台
# 添加filter
loggingFiletr = failureFilter()
console_handler.addFilter(loggingFiletr)
logger.addHandler(console_handler)
logger.info('Info 级别日志信息')
logger.error('Failure')
D、使用配置文件配置 Logger(高级用法)
对于更复杂的项目,你可以使用配置文件(如 JSON 或 YAML 文件)来配置 logging。这可以通过 logging.config.dictConfig 方法实现。例如:
import logging.config
LOGGING_CONFIG = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'standard': {
'format': '%(asctime)s [%(levelname)s] %(name)s: %(message)s'
},
},
'handlers': {
'default': {
'level':'DEBUG',
'class':'logging.StreamHandler',
'formatter': 'standard'
},
'file': {
'level':'DEBUG',
'class':'logging.FileHandler',
'formatter': 'standard',
'filename': 'app.log',
},
},
'loggers': {
'': { # root logger配置使用上面定义的handler和level等配置。也可以为不同的logger指定不同的配置。
'handlers': ['default', 'file'],
'level': 'DEBUG',
'propagate': True, # 是否将日志向上传递到root logger。默认为True。如果设置为False,则不会将此logger的日志传递给上级logger。
},
}
}
logging.config.dictConfig(LOGGING_CONFIG) # 应用配置
2、举例说明
写一个日志采集的实例,步骤:
- 创建一个日志采集器:logging.fetLogger(“”)
- 给收集器设置日志级别
- 给日志采集器创建一个输出处理器
- 给处理器设置一个日志输出内容的格式
- 将设置的格式绑定到处理器中
- 将设置好的渠道添加到收集器中
参考如下:
import logging.handlers #导入库,才能使用handler 类创建对象
#创建日志采集器对象,logger
logger = logging.getLogger()
#设置采集器级别,logger 等级设置
logger.setLevel(logging.INFO) #设置了信息等级,消息在粗粒度级别上强调应用程序的运行过程
#创建处理器handler 对象
sh = logging.StreamHandler()
#根据时间分割日志
th = logging.handlers.TimedRotatingFileHandler(filename="D:\\dewi\\project2024\\myListPractice\\pythonProject1\\test_data\\0402.log",
when="S",
interval=1,
backupCount=3
)
#创建日志格式
fmt = "%(asctime)s %(levelname)s [%(name)s] [%(filename)s (%(funcName)s:%(lineno)d)] - %(message)s"
fm = logging.Formatter(fmt)
#将日志格式设置给处理器
sh.setFormatter(fm)
th.setFormatter(fm)
#将控制台处理器添加到logger
logger.addHandler(sh)
logger.addHandler(th)
#外部程序调用采集器获取日志
logger.info("Hi,it is an info")
logger.debug("Hi,it is a debug")
logger.error("Hi,it is an error")
logger.warning("Hi,this is a warning!")
输出结果,过滤了info消息日志:
2025-04-13 16:47:41,864 INFO [root] [get_log.py (<module>:31)] - Hi,it is an info
2025-04-13 16:47:41,866 ERROR [root] [get_log.py (<module>:33)] - Hi,it is an error
2025-04-13 16:47:41,866 WARNING [root] [get_log.py (<module>:34)] - Hi,this is a warning!
Process finished with exit code 0
每天进步一点点,继续加油!
相关文章:
AI基础04-日志数据采集
上篇文章我们学习了视频的数据采集,今天主要了解一下日志数据采集的方法。日志数据采集的目的通常是:调试、运维监控和业务分析。调试主要是工程师在程序异常时针对关键环节把相关参数通过日志打印出来,找出哪个环节出现了问题。运维监控主要…...
文章记单词 | 第29篇(六级)
一,单词释义 AI /ˌeɪ ˈaɪ/ abbr. 人工智能(Artificial Intelligence)inventory /ˈɪnvəntri/ n. 存货清单;财产清单;库存货物;存货;v. 编制目录;开列清单;盘存cha…...
Arduino示例代码讲解:String substring() 字符串子链
Arduino示例代码讲解:String substring 字符串子链 String substring() 字符串子链程序功能概述功能:硬件要求:输出:代码结构`setup()` 函数`loop()` 函数创建字符串:提取子字符串:无限循环:运行过程代码输出解释原始字符串:提取子字符串:注意事项String substring() …...
2025年七星棋牌跨平台完整源码解析(200+地方子游戏+APP+H5+小程序支持,附服务器镜像导入思路)
目前市面上成熟的棋牌游戏源码很多,但能做到平台全覆盖、地方玩法丰富、交付方式标准化的系统却不多。今天这套七星棋牌2023完整源码具备安卓/iOS/H5/微信小程序端四端互通能力,附带200多款地方子游戏,还配备了后台管理与自动热更系统&#x…...
Odoo 部署本地 把現時的excel計算表格部署上odoo 教程
要将现有的 Excel 计算表格部署到 Odoo 平台上,您可以按照以下步骤进行操作: 将 Excel 表格中的数据转移到 Odoo 模块中:首先,您需要将 Excel 表格中的数据导出为 CSV 格式,然后可以使用 Odoo 的数据导入功能将这些数据…...
compose map 源码解析
目录 TileCanvas ZoomPanRotateState ZoomPanRotate 布局,手势处理完了,就开始要计算tile了 MapState TileCanvasState telephoto的源码已经分析过了.它的封装好,扩展好,适用于各种view. 最近又看到一个用compose写的map,用不同的方式,有点意思.分析一下它的实现流程与原…...
Go语言--语法基础4--基本数据类型--整数类型
整型是所有编程语言里最基础的数据类型。 Go 语言支持如下所示的这些整型类型。 需要注意的是, int 和 int32 在 Go 语言里被认为是两种不同的类型,编译器也不会帮你自动做类型转换, 比如以下的例子会有编译错误: var value2 in…...
mysql事务脏读 不可重复读 幻读 事务隔离级别关系
看了很多文档,发现针对事务并发执行过程中的数据一致性问题,即脏读、不可重复读、幻读的解释一塌糊涂,这也不能说什么,因为官方SQL标准中的定义也模糊不清。 按照mysql中遵循的事务隔离级别,可以梳理一下其中的关系 隔…...
智慧乡村数字化农业全产业链服务平台建设方案PPT(99页)
1. 农业全产业链概念 农业全产业链是依托数字化、电子商务、云计算等技术,整合规划咨询、应用软件设计与开发等服务,推动农业产业升级和价值重塑,构建IT产业融合新生态。 2. 产业链技术支撑 利用云计算、大数据、区块链等技术,为…...
信息系统项目管理师-软考高级(软考高项)2025最新(二)
个人笔记整理---仅供参考 第二章信息技术发展 2.1信息技术及其发展 2.1.1计算机软硬件 2.1.2计算机网络 2.1.3存储和数据库 2.1.4信息安全 公钥公开,私钥保密 2.1.5信息技术的发展 2.2新一代信息技术及应用 2.2.1物联网 2.2.2云计算 2.2.3大数据 2.2.4区块链 2.2.5…...
基于Springboot+Mysql的闲一品(含LW+PPT+源码+系统演示视频+安装说明)
系统功能 管理员功能:首页、个人中心、用户管理、零食分类管理、零食信息管理、订单评价管理、系统管理、订单管理。用户功能:首页、个人中心、订单评价管理、我的收藏管理、订单管理。前台首页功能:首页、零食信息、零食资讯、个人中心、后…...
索引下推(Index Condition Pushdown, ICP)
概念 索引下推是一种数据库查询优化技术,通过在存储引擎层面应用部分WHERE条件来减少不必要的数据读取。它特别适用于复合索引的情况,因为它可以在索引扫描阶段就排除不符合全部条件的数据行,而不是将所有可能匹配的记录加载到服务器层再进行…...
Transformer模型在自然语言处理中的实战应用
基于BERT的文本分类实战:从原理到部署 一、Transformer与BERT核心原理 Transformer模型通过自注意力机制(Self-Attention)突破了RNN的顺序计算限制,BERT(Bidirectional Encoder Representations from Transformers)作为其典型代表,具有两大创新: 双向上下文编码:通过…...
stm32week11
stm32学习 八.stm32基础 2.stm32内核和芯片 F1系统架构:4个主动单元和4个被动单元 AHB是内核高性能总线,APB是外围总线 总线矩阵将总线和各个主动被动单元连到一起 ICode总线直接连接Flash接口,不需要经过总线矩阵 AHB:72MHz&am…...
ConcurrentHashMap 源码分析
摘要 介绍线程安全集合类 ConcurrentHashMap 源码,包括扩容,协助扩容,红黑树节点读写线程同步,插入元素后累加键值对数量操作原子性实现。 1 成员变量及其对应的数据结构 底层由数组红黑树链表实现volatile long baseCount 和 v…...
Python数据可视化:从脚本到海报级图表
Python数据可视化:从脚本到海报级图表 引言 在数据分析和科学计算领域,Python 是一种强大且灵活的工具。本文将带您了解如何使用 Python 进行数据可视化,从简单的脚本到生成高质量的海报级图表。我们将重点介绍如何使用 Matplotlib 库来创建、保存和优化图表,以便在各种场…...
【Python语言基础】19、垃圾回收
文章目录 1. 垃圾回收1.1 引用计数-日常检查货物标签1.2 标记-清除算法:处理互相依赖的货物1.3 分代回收:根据货物新旧安排清理频率 2. 特殊方法2.1 构造和析构方法2.2 字符串表示方法2.3 比较方法2.4 容器相关方法2.5 可调用对象方法 1. 垃圾回收 计算…...
用户自定义函数(UDF)开发与应用(二)
五、UDF 在不同平台的应用 5.1 数据库中的 UDF 应用(如 MySQL、PostgreSQL) 在数据库领域,UDF 为开发者提供了强大的扩展能力,使得数据库可以完成一些原本内置函数无法实现的复杂操作。 以 MySQL 为例,假设我们有一…...
从三次方程到复平面:复数概念的奇妙演进(二)
注:本文为 “复数 | 历史 / 演进” 相关文章合辑。 因 csdn 篇幅限制分篇连载,此为第二篇。 生料,不同的文章不同的点。 机翻,未校。 History of Complex Numbers 复数的历史 The problem of complex numbers dates back to …...
深入剖析缓存一致性问题:延时双删的利弊与替代方案
在当今的分布式系统架构中,缓存凭借其快速的数据读取能力,成为提升系统性能和响应速度的关键组件。然而,缓存的引入也带来了缓存一致性问题,这一问题成为开发者在系统设计与维护中必须攻克的难关。缓存一致性问题聚焦于数据更新时…...
基于视觉语言模型的机器人实时探索系统!ClipRover:移动机器人零样本视觉语言探索和目标发现
作者:Yuxuan Zhang 1 ^{1} 1, Adnan Abdullah 2 ^{2} 2, Sanjeev J. Koppal 3 ^{3} 3, and Md Jahidul Islam 4 ^{4} 4单位: 2 , 4 ^{2,4} 2,4佛罗里达大学电气与计算机工程系RoboPI实验室, 1 , 3 ^{1,3} 1,3佛罗里达大学电气与计算机工程系F…...
LabVIEW往复式压缩机管路故障诊断系统
往复式压缩机作为工业领域的关键设备,广泛应用于石油化工、能源等行业,承担着气体压缩的重要任务。然而,其管路故障频发,不仅降低设备性能、造成能源浪费,还可能引发严重安全事故。因此,开发精准高效的管路…...
wsl下编译eXosip和osip库(Ubuntu 22.04)
1.下载eXosip和osip osip下载路径 Index of /mirror/gnu.org/savannah/osip eXosip下载路径 Index of /nongnu/exosip 我选的osip和eXosip版本为 5.2.0 2.编译osip库 tar -zxvf libosip2-5.2.0.tar.gz cd libosip2-5.2.0 ./configure make make install 在编译…...
springboot 项目 jmeter简单测试流程
测试内容为 主机地址随机数 package com.hainiu.example;import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotat…...
程序化广告行业(82/89):解锁行业术语,开启专业交流之门
程序化广告行业(82/89):解锁行业术语,开启专业交流之门 在程序化广告这个充满活力与挑战的行业里,持续学习是我们不断进步的动力源泉。一直以来,我都期望能和大家一起深入探索这个领域,共同成长…...
算法思想之位运算(二)
欢迎拜访:雾里看山-CSDN博客 本篇主题:算法思想之位运算(二) 发布时间:2025.4.13 隶属专栏:算法 目录 滑动窗口算法介绍六大基础位运算符常用模板总结 例题判定字符是否唯一题目链接题目描述算法思路代码实现 汉明距离题目链接题目…...
Collection vs Collections:核心区别与面试指南
Collection vs Collections:核心区别与面试指南 一、本质区别(核心记忆点) 维度CollectionCollections身份集合框架的根接口操作集合的工具类包位置java.utiljava.util是否可实例化❌ 接口✅ 类(但构造器私有,不可实…...
win10中快速访问部分外网的快捷设置方法
目的 不翻墙而访问一些本来访问很慢的网站。 具体操作 例如想要访问 github 网站,首先在终端(Terminal,cmd或powershell)中通过 ping github.com 判断网站是否可以被ping到: 若返回 Request time out. 则说明本方法不可用。若收到Reply&am…...
【计网】网络交换技术之报文交换(复习自用,了解,重要3)
复习自用的,处理得比较草率,复习的同学或者想看基础的同学可以看看,大佬的话可以不用浪费时间在我的水文上了 另外两种交换技术可以直接点击链接访问相关笔记: 电路交换 分组交换 一、报文交换的定义 报文交换(Me…...
【Web功能测试】Web商城搜索模块测试用例设计深度解析
Web商城的搜索模块功能测试用例设计 1.搜索功能设计 1.1 搜索框设计 位置显眼:通常置于页面顶部中央,符合用户习惯。 智能提示(Autocomplete):输入时实时推荐关键词、商品或分类(如“手机 苹果”&#x…...
