您现在的位置是:首页 > 正文

Python自动化框架搭建——日志收集

2024-02-01 04:19:13阅读 1

1、日志概念

        日志就是用于记录系统运行时的信息,对一个事件的记录,也称为Log。

2、日志作用

  • 调试程序
  • 了解系统程序运行的情况,是否正常
  • 系统程序运行故障分析与问题定位
  • 用来做用户行为分析和数据统计

3、 日志级别

日志级别:是指日志信息的优先级、重要性或者严重程度

常见的日志级别 描述
DEBUG 调试级别,打印非常详细的日志信息,通常用于对代码的调试

INFO

信息级别,打印一般的日志信息,突出强调程序的运行过程
WARNING 警告级别,打印警告日志信息,表明会出现潜在错误的情形,一般不影响软件的正常使用
ERROR 错误级别,打印错误异常信息,该级别的错误可能会导致系统的一些功能无法正常使用
CRITICAL 严重错误级别,一个严重的错误,这表明系统可能无法继续运行

说明:

        上面列表中的日志级别是从上到下依次升高的,即:DEBUG < INFO < WARNING < ERROR < CRITICAL;        

        当为程序指定一个日志级别后,程序会记录所有日志级别大于或等于指定日志级别的日志信息,而不是仅仅记录指定级别的日志信息;        

        一般建议只使用DEBUG、INFO、WARNING、ERROR这四个级别。

4、日志的基本用法

import logging    # 导入日志依赖包

logging.debug("这是一条调试信息") 
logging.info("这是一条普通信息") 
logging.warning("这是一条警告信息") 
logging.error("这是一条错误信息") 
logging.critical("这是一条严重错误信息")

(1)设置日志级别

logging.basicConfig(level=logging.DEBUG)

level可选:
    logging.DEBUG
    logging.INFO
    logging.WARNING
    logging.ERROR
    logging.CRITICAL

注:logging中默认的日志级别为WARNING,程序中大于等于该级别的日志才能输出,小于该级别的日志不会被打印出来。

(2)设置日志格式

默认的日志的格式为:日志级别:Logger名称:日志内容

自定义日志格式:

logging.basicConfig(format="格式化信息")

常用的格式化信息
format = '%(asctime)s %(levelname)s [%(name)s] [%(filename)s(%(funcName)s:%(lineno)d)] - %(message)s'

format参数可能用到的格式化信息:

占位符 描述

%(name)s

Logger的名字
%(levelno)s 数字形式的日志级别
%(levelname)s 文本形式的日志级别
%(pathname)s 调用日志输出函数的模块的完整路径名,可能没有
%(filename)s 调用日志输出函数的模块的文件名
%(module)s 调用日志输出函数的模块名
%(funcName)s 调用日志输出函数的函数名
%(lineno)d 调用日志输出函数的语句所在的代码行
%(created)f 当前时间,用UNIX标准的表示时间的浮点数表示
%(relativeCreated)d 输出日志信息时的,自Logger创建以来的毫秒数
%(asctime)s 字符串形式的当前时间。默认格式是 “2003-07-08 16:49:45,896”
%(thread)d 线程ID。可能没有
%(threadName)s 线程名。可能没有
%(process)d 进程ID。可能没有
%(message)s 用户输出的消息

(3)将日志信息输出到文件中

默认情况下Python的logging模块将日志打印到了标准输出中(控制台)。

将日志信息输出到文件中:

logging.basicConfig(filename="输出的文件名.log")

日志的高级用法

1、logging日志模块四大组件

组件名称 类名 功能描述
日志器 Logger 提供了程序使用日志的入口
处理器 Handler 将logger创建的日志记录发送到合适的目的输出
格式器 Formatter 决定日志记录的最终输出格式
过滤器 Filter 提供了更细粒度的控制工具来决定输出哪条日志记录,丢弃哪条日志记录

2、组件之间的关系

日志器:提供了记录日志的入口,如:log.info("")
处理器:真正将日志器内容发送到控制台还是文件或网络,都是处理器干的;每个日志器都可                      以添加多个不同的处理器
格式器:处理器可以设置不同的格式,就需要使用格式器
过滤器:处理器需要过滤日志信息,就需要设置过滤器

3、Logger类

Logger类对象的任务:

  • 向程序暴露记录日志的方法
  • 基于日志级别或Filter对象来决定要对哪些日志进行后续处理
  • 将日志消息传送给所有感兴趣的日志handlers

如何创建Logger类对象:

logger = logging.getLogger() 

或者

logger = logging.getLogger(name)

logging.getLogger()方法有一个可选参数name,该参数表示将要返回的日志器的名称标识,如果不提供该参数,则返回root日志器对象。 若以相同的name参数值多次调用getLogger()方法,将会返回指向同一个logger对象的引用

Logger常用的方法:

方法 描述

logger.debug()

logger.info()

logger.warning()

logger.error()

logger.critical()

打印日志
logger.setLevel() 设置日志器将会处理的日志消息的最低严重级别
logger.addHandler() 为该logger对象添加一个handler对象
logger.addFilter() 为该logger对象添加一个filter对象

4、Handler类

作用:Handler对象的作用是将消息分发到handler指定的位置,比如:控制台、文件、网络、邮件等。 Logger对象可以通过addHandler()方法为自己添加多个handler对象。

如何创建Handler类对象:

Handler 描述
logging.StreamHandler 将日志消息发送到输出到Stream,如std.out, std.err或任何 file-like对象
logging.FileHandler 将日志消息发送到磁盘文件,默认情况下文件大小会无限增 长
logging.handlers.RotatingFileHandler 将日志消息发送到磁盘文件,并支持日志文件按大小切割
logging.hanlders.TimedRotatingFileHandler 将日志消息发送到磁盘文件,并支持日志文件按时间切割
logging.handlers.HTTPHandler 将日志消息以GET或POST的方式发送给一个HTTP服务器
logging.handlers.SMTPHandler 将日志消息发送给一个指定的email地址

Handler常用的方法:

方法 描述
handler.setLevel() 设置handler将会处理的日志消息的最低严重级别
handler.setFormatter() 为handler设置一个格式器对象
handler.addFilter() 为handler添加一个过滤器对象

5、Formatter类

作用:Formatter对象用于配置日志信息的格式。

如何创建Formatter类对象:

formatter = logging.Formatter(fmt=None, datefmt=None, style='%') 
    fmt:指定消息格式化字符串,如果不指定该参数则默认使用message的原始值 
    datefmt:指定日期格式字符串,如果不指定该参数则默认使用"%Y-%m-%d %H:%M:%S" 
    style:Python 3.2新增的参数,可取值为 '%', '{'和 '$',如果不指定该参数则默认使用'%'

6、日志高级用法综合案例分析

目标:将日志信息同时输出到控制台和文件中

import logging.handlers    # 导入此包才能使用handler类创建对象

# 获取logger
logger = logging.getLogger()

# 设置级别
logger.setLevel(logging.INFO)

# 获取控制台 处理器
sh = logging.StreamHandler()
# 根据时间切割文件 处理器
th = logging.handlers.TimedRotatingFileHandler(filename="文件名.log",
                                                when="S",
                                                interval=1,
                                                backupCount=3,
                                                encoding="utf-8")

# 添加格式器
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("info")
logger.debug("debug")
logger.error("error")
logger.warning("warning")

logging.handlers.TimedRotatingFileHandler()参数说明:

filename:文件名
when:间间隔的类型

      可选S(秒)、M(分钟)、H(小时)、D(天)、midnight(一夜)、W{0-6}(周几)
interval: 时间间隔
backupCount:能留几个日志文件,超过数量就会丢弃掉老的日志文件

网站文章

  • 【MongoDB】深入了解MongoDB不可不知的十点

    一、对象ID的生成 每个mongoDB文档那个都要求有一个主键,它在每个集合中对所有的文档必须是唯一的,主键存放在文档_id字段中。由12个字符组成; 4c291856 238d3b 19b2 000001 4字节时间戳 机器ID 进程ID 计数器3333 二、BSON BSON是mongodb中用来标示文档的二进制格式,它既是存储格式,也是命令格式。所有文档都以bson存储在磁盘上,所...

    2024-02-01 04:18:44
  • Android - 文件读写操作 总结

    在Android中的文件放在不同位置,它们的读取方式也有一些不同。本文对android中对资源文件的读取、数据区文件的读取、SD卡文件的读取及RandomAccessFile的方式和方法进行了整理。供参考。

    2024-02-01 04:18:37
  • 编译原理学习:TINY语言词法扫描程序实现 热门推荐

    《编译原理及实现》上的TINY语言词法扫描器的实现。并做了如下改善: 1、允许嵌套注释 2、标识符允许出现数字,但是必需以字母开头(和C语言一样)

    2024-02-01 04:18:32
  • 重定向解决浏览器刷新后数据多次存入的问题

    当在浏览器提交表单, 提交成功后浏览器将跳转到一个新的html页面 提交成功后如果刷新页面 跳转方式如果是转发, 数据库将多存入数据一次原来数据 public class SaveServlet ex...

    2024-02-01 04:18:03
  • 在Vue中使用Tinymce富文本编辑器+上传图片到七牛

    在Vue中使用Tinymce富文本编辑器+上传图片到七牛

    公司官网后台需要做一个上传新闻、公告的功能,自然而然就需要用到了富文本编辑器。UEditor、Simditor、wangEditor、CKEditor、TinyMCE、Quill,这是当前比较热门的几...

    2024-02-01 04:17:48
  • Vue项目性能分析工具--webpack-bundle-analyzer

    Vue项目性能分析工具--webpack-bundle-analyzer

    在优化项目的时候,每次打包后只知道包文件大,却不知道那个文件大,那个文件还有优化的空间,所以,推荐一款工具,只要在项目中安装配置一下,便可以一目了然的呈现出打包后资源所占的比例,接下来上教程: 我的项...

    2024-02-01 04:17:40
  • html改有序列表的序号颜色,CSS3 自定义OL/LI有序列表序号样式

    CSS语言:CSSSCSS确定@import url(https://fonts.googleapis.com/css?family=Rambla:400,400italic,700);html {b...

    2024-02-01 04:17:12
  • 表格与表单

    表格与表单

    表格、表单

    2024-02-01 04:17:04
  • .htaccess的301重定向代码汇总

    很久以前做过一个图片站,很久没有打理了。域名不打算续费了,但是这么多年的权重不能浪费了啊!于是我决定将它301跳转到另一个域名的子域名,在到期之前传递点权重。.htaccess的301重定向方式有以下几种:1.把不带www的域名301重定向到带www的域名

    2024-02-01 04:16:58
  • Java包装类练习题

    选择题1.C2.C3.BC4.D5.C6.B7.D8.A编程题完成基本数据类型和包装类之间的转换。public class HelloWorld { public static void main(String[] args) { // 定义int类型变量,值为100 int score = 100; ...

    2024-02-01 04:16:31