AI基础04-日志数据采集

news2025/4/15 18:35:50

      上篇文章我们学习了视频的数据采集,今天主要了解一下日志数据采集的方法。日志数据采集的目的通常是:调试、运维监控和业务分析。调试主要是工程师在程序异常时针对关键环节把相关参数通过日志打印出来,找出哪个环节出现了问题。运维监控主要是监控系统运行的负载、并发性能以及消耗时间等指标。通过日志可以记录用户的每一次操作,以及相关维度信息,有了这些数据就可以做一些运营分析,如访问量、用户转化、留存分析等。

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、举例说明

写一个日志采集的实例,步骤:

  1. 创建一个日志采集器:logging.fetLogger(“”)
  2. 给收集器设置日志级别
  3. 给日志采集器创建一个输出处理器
  4. 给处理器设置一个日志输出内容的格式
  5. 将设置的格式绑定到处理器中
  6. 将设置好的渠道添加到收集器中

参考如下:

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

每天进步一点点,继续加油!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2334395.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2025年七星棋牌跨平台完整源码解析(200+地方子游戏+APP+H5+小程序支持,附服务器镜像导入思路)

目前市面上成熟的棋牌游戏源码很多&#xff0c;但能做到平台全覆盖、地方玩法丰富、交付方式标准化的系统却不多。今天这套七星棋牌2023完整源码具备安卓/iOS/H5/微信小程序端四端互通能力&#xff0c;附带200多款地方子游戏&#xff0c;还配备了后台管理与自动热更系统&#x…

Go语言--语法基础4--基本数据类型--整数类型

整型是所有编程语言里最基础的数据类型。 Go 语言支持如下所示的这些整型类型。 需要注意的是&#xff0c; int 和 int32 在 Go 语言里被认为是两种不同的类型&#xff0c;编译器也不会帮你自动做类型转换&#xff0c; 比如以下的例子会有编译错误&#xff1a; var value2 in…

智慧乡村数字化农业全产业链服务平台建设方案PPT(99页)

1. 农业全产业链概念 农业全产业链是依托数字化、电子商务、云计算等技术&#xff0c;整合规划咨询、应用软件设计与开发等服务&#xff0c;推动农业产业升级和价值重塑&#xff0c;构建IT产业融合新生态。 2. 产业链技术支撑 利用云计算、大数据、区块链等技术&#xff0c;为…

信息系统项目管理师-软考高级(软考高项)​​​​​​​​​​​2025最新(二)

个人笔记整理---仅供参考 第二章信息技术发展 2.1信息技术及其发展 2.1.1计算机软硬件 2.1.2计算机网络 2.1.3存储和数据库 2.1.4信息安全 公钥公开&#xff0c;私钥保密 2.1.5信息技术的发展 2.2新一代信息技术及应用 2.2.1物联网 2.2.2云计算 2.2.3大数据 2.2.4区块链 2.2.5…

基于Springboot+Mysql的闲一品(含LW+PPT+源码+系统演示视频+安装说明)

系统功能 管理员功能&#xff1a;首页、个人中心、用户管理、零食分类管理、零食信息管理、订单评价管理、系统管理、订单管理。用户功能&#xff1a;首页、个人中心、订单评价管理、我的收藏管理、订单管理。前台首页功能&#xff1a;首页、零食信息、零食资讯、个人中心、后…

stm32week11

stm32学习 八.stm32基础 2.stm32内核和芯片 F1系统架构&#xff1a;4个主动单元和4个被动单元 AHB是内核高性能总线&#xff0c;APB是外围总线 总线矩阵将总线和各个主动被动单元连到一起 ICode总线直接连接Flash接口&#xff0c;不需要经过总线矩阵 AHB&#xff1a;72MHz&am…

从三次方程到复平面:复数概念的奇妙演进(二)

注&#xff1a;本文为 “复数 | 历史 / 演进” 相关文章合辑。 因 csdn 篇幅限制分篇连载&#xff0c;此为第二篇。 生料&#xff0c;不同的文章不同的点。 机翻&#xff0c;未校。 History of Complex Numbers 复数的历史 The problem of complex numbers dates back to …

基于视觉语言模型的机器人实时探索系统!ClipRover:移动机器人零样本视觉语言探索和目标发现

作者&#xff1a;Yuxuan Zhang 1 ^{1} 1, Adnan Abdullah 2 ^{2} 2, Sanjeev J. Koppal 3 ^{3} 3, and Md Jahidul Islam 4 ^{4} 4单位&#xff1a; 2 , 4 ^{2,4} 2,4佛罗里达大学电气与计算机工程系RoboPI实验室&#xff0c; 1 , 3 ^{1,3} 1,3佛罗里达大学电气与计算机工程系F…

LabVIEW往复式压缩机管路故障诊断系统

往复式压缩机作为工业领域的关键设备&#xff0c;广泛应用于石油化工、能源等行业&#xff0c;承担着气体压缩的重要任务。然而&#xff0c;其管路故障频发&#xff0c;不仅降低设备性能、造成能源浪费&#xff0c;还可能引发严重安全事故。因此&#xff0c;开发精准高效的管路…

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…

算法思想之位运算(二)

欢迎拜访&#xff1a;雾里看山-CSDN博客 本篇主题&#xff1a;算法思想之位运算(二) 发布时间&#xff1a;2025.4.13 隶属专栏&#xff1a;算法 目录 滑动窗口算法介绍六大基础位运算符常用模板总结 例题判定字符是否唯一题目链接题目描述算法思路代码实现 汉明距离题目链接题目…

【计网】网络交换技术之报文交换(复习自用,了解,重要3)

复习自用的&#xff0c;处理得比较草率&#xff0c;复习的同学或者想看基础的同学可以看看&#xff0c;大佬的话可以不用浪费时间在我的水文上了 另外两种交换技术可以直接点击链接访问相关笔记&#xff1a; 电路交换 分组交换 一、报文交换的定义 报文交换&#xff08;Me…

【动态规划】深入动态规划:背包问题

文章目录 前言01背包例题一、01背包二、分割等和子集三、目标和四、最后一块石头的重量|| 完全背包例题一、完全背包二、 零钱兑换三、零钱兑换||四、完全平方数 前言 什么是背包问题&#xff0c;怎么解决算法中的背包问题呢&#xff1f; 背包问题 (Knapsack problem) 是⼀种组…

BUUCTF-web刷题篇(25)

34.the mystery of ip 给出链接&#xff0c;输入得到首页&#xff1a; 有三个按钮&#xff0c;flag点击后发现页面窃取客户端的IP地址&#xff0c;通过给出的github代码中的php文件发现可以通过XFF或Client-IP传入值。使用hackbar或BP 使用XSS&#xff0c;通过github给出的目录…

StringBuilder类基本使用

文章目录 1. 基本介绍2. StringBuilder常用方法3. String、StringBuffer 和 StringBuilder 的比较4. String、StringBuffer 和 StringBuilder 的效率测试5. String、StringBuffer 和 StringBuilder 的选择 1. 基本介绍 一个可变的字符序列。此类提供一个与StringBuffer兼容的A…

设计模式 --- 访问者模式

访问者模式是一种行为设计模式&#xff0c;它允许在不改变对象结构的前提下&#xff0c;定义作用于这些对象元素的新操作。 优点&#xff1a; 1.​​符合开闭原则&#xff1a;新增操作只需添加新的访问者类&#xff0c;无需修改现有对象结构。 ​​2.操作逻辑集中管理​​&am…

HashTable,HashMap,ConcurrentHashMap之间的区别

文章目录 线程安全方面性能方面总结 线程安全方面 HashMap线程不安全&#xff0c;HashMap的方法没有进行同步&#xff0c;多个线程同时访问HashMap&#xff0c;并至少有一个线程修改了其内容&#xff0c;则必须手动同步。 HashTable是线程安全的&#xff0c;在HashMap的基础上…

LeetCode.225. 用队列实现栈

用队列实现栈 题目解题思路1. push2. pop3. empty CodeQueue.hQueue.cStack.c 题目 225. 用队列实现栈 请你仅使用两个队列实现一个后入先出&#xff08;LIFO&#xff09;的栈&#xff0c;并支持普通栈的全部四种操作&#xff08;push、top、pop 和 empty&#xff09;。 实现…

LVGL AnalogClock控件和Dclock控件详解

LVGL AnalogClock控件和Dclock控件详解 一、AnalogClock控件详解1. 概述2. 创建模拟时钟2.1 函数2.2 参数2.3 返回值 3. 设置时间3.1 函数3.2 参数 4. 获取时间4.1 函数4.2 参数 5. 设置样式5.1 常用样式属性5.2 示例代码 6. 更新时间6.1 定时器回调示例6.2 创建定时器 7. 示例…

【C++初学】课后作业汇总复习(七) 指针-深浅copy

1、 HugeInt类:构造、、cout Description: 32位整数的计算机可以表示整数的范围近似为&#xff0d;20亿到&#xff0b;20亿。在这个范围内操作一般不会出现问题&#xff0c;但是有的应用程序可能需要使用超出上述范围的整数。C可以满足这个需求&#xff0c;创建功能强大的新的…