web自动化笔记十六:日志收集
日志的作用:
-调试程序
-了解系统程序运行情况,是否正常
-系统程序运行故障分析与问题定位
-用来做用户行为分析的数据统计
日志级别:是指日志信息的优先级、重要性或者严重程度
DEBUG:调试级别,打印非常详细的日志信息,通常用于对代码的调试
INFO:信息级别,打印一般的日志信息,突出强调程序的运行过程
WARNING:警告级别,打印警告日志信息,表现会出现潜在错误的情形,一般不影响软件的正常使用
ERROR:错误级别,打印错误异常信息,该级别错误可能会导致系统的一些功能无法正常使用
CRITICAL:严重错误级别,一个严重的错误,这表明系统可能无法继续运行
一般只搜索DEBUG、INFO、WARNING、ERROR四个日志级别步骤
1、导包
2、调用相应级别方法,记录日志
代码详解:
import logging# 设置日志级别
logging.basicConfig(level=logging.INFO)
# 打印日志信息
"""
设置日志级别后错误级别 ≥ INFO级别的才会被记录
"""
logging.debug("this is DEBUG...")
logging.info("this is INFO...")
logging.warning("this is WARNING...")
logging.error("this is ERROR...")
logging.critical("this is CRITICAL...")
编译结果:
INFO:root:this is INFO...
WARNING:root:this is WARNING...
ERROR:root:this is ERROR...
CRITICAL:root:this is CRITICAL...
设置日志级别
Logging.basicConfig(level=logging.DEBUG)
提示:
1、默认级别:logging.WARNING
2、设置级别时调用的是logging文件夹下面的常量,而不是调用的小写方法
3、设置级别后,日志信息只会记录大于或者等于此级别的记录
设置输出日志格式
fm = "%(asctime)s %(levelname)s [%(name)s] [%(filename)s (%(funcName)s:%(lineno)d] - %(message)s"
设置日志输出到指定文件中
(三个参数:等级:level , 格式化:format ,输出文件:filename)
Logging.basceConfig(level = logging.DEBUG,format = fm,filename = "../log/log01.log")
执行代码:
import logging
"""
设置日志级别后错误级别 ≥ INFO级别的才会被记录
"""
# 设置log输出格式
fm = "%(asctime)s %(levelname)s [%(name)s] [%(filename)s (%(funcName)s:%(lineno)d] - %(message)s"
# 设置日志级别,格式和输出位置
logging.basicConfig(level=logging.DEBUG,format = fm, filename= "./log/log01.log")# 打印日志信息
logging.debug("this is DEBUG...")
logging.info("this is INFO...")
logging.warning("this is WARNING...")
logging.error("this is ERROR...")
logging.critical("this is CRITICAL...")
Log01.log中的日志内容:
2021-06-29 22:35:00,146 DEBUG [root] [logging_level.py (<module>:9] - this is DEBUG...
2021-06-29 22:35:00,147 INFO [root] [logging_level.py (<module>:10] - this is INFO...
2021-06-29 22:35:00,147 WARNING [root] [logging_level.py (<module>:11] - this is WARNING...
2021-06-29 22:35:00,147 ERROR [root] [logging_level.py (<module>:12] - this is ERROR...
2021-06-29 22:35:00,147 CRITICAL [root] [logging_level.py (<module>:13] - this is CRITICAL...
日志的高级用法
logging的四大组件
Logger :日志器 - 提供了程序使用日志的入口
Handle : 处理器 - 将logger创建的日志记录发送到合适的目的输出
Formatter : 格式器 - 决定日志记录的最终输出格式
Filter : 提供了更细颗粒的控制工具来决定输出哪条日志记录,丢弃哪条日志记录
注意:logging模块是通过这些组件来完成日志处理的
各组件之间的关系:
1、日志器(logger)需要通过处理器(handler)将日志信息输出到目标位置,如:文件、sys.std.out、网络等;
2、不同的处理器(handler)可以将日志输出到不同的位置;比如:控制台、文件、网络、邮件等。
3、日志器(logger)可以设置多个处理器(handler)将同一条日志记录输出到不同的位置;
4、每个处理器(handler)都可以设置自己的格式器(formatter)实现同一条日志以不同的格式输出到不同的地方。
5、每个处理器(handler)都可以设置自己的过滤器(filter)实现日志过滤,从而只保留感兴趣的日志; 简单点说就是:日志器(logger)是入口,真正干活儿的是处理器(handler),处理器(handler)还可以通过过 滤器(filter)和格式器(formatter)对要输出的日志内容做过滤和格式化等处理操作。
日志器和处理器的使用
logger常用方法
如何创建logger对象
logger = logging.getLogger() - root
Logger = logging.getLogger(“mylogger”)
设置日志器将会处理的日志消息的最低严重级别
logger.setLevel()
为该logger对象添加一个handle对象
logger.addHandle()
如何创建Handle对象
logging.StreamHandler : 将日志消息发送到输出到Stream,如std.out;std.eer或任何file-like对象
logging.FileHandler:将日志消息发送到磁盘文件,默认情况下文件大小会无限增长
logging.handlers.RotatingFileHandler:将日志消息发送到磁盘文件,并支持日志文件按大小切割(了解)
logging.handlers.TimeRotatingHandler:将日志消息发送到磁盘文件,并支持日志文件按时间切割(掌握)
logging.handlers.HTTPHandler:将日志消息以GET或POST的方式发送给一个HTTP服务器
logging.handlers.SMTPHandler:将日志消息发送给一个指定的email地址
TimeRotatingHandler应用:
导包:import logging.handlers
实例化:th = logging.handlers.TimeRotatingHandler(filename = “文件路径”,
when = “时间单位”,
interval = “间隔时间”
backupcount = 备份日志数量)
when:时间单位
interval:时间间隔
backupcount:保留备份日志数量
Handler常用方法
设置handler将会处理的日志消息的最低严重级别
handler.setLevel()
设置格式器
handler.setFormatter()
日志器:
操作:
1、导包 import logging
2、调用方法获取logger对象 如:logging.getlogger()
3、设置级别:logger.setlevel = logging.INFO
4、调用添加处理器方法 logger.addHandler(处理器)
处理器:
获取:
1、sh = logging.StreamHandler()
扩展:设置处理器级别为error级别,那么只有error级别信息才会写入文件
格式器:
获取:
fmt = “%(asctime)s %(levelname)s [%(name)s] [%(filename)s (%(funcName)s:%(lineno)d] - %(message)s”
fm = logging.Formatter(fmt)
控制台处理器.setFormatter(fm)
文件处理器.setFormatter(fm)
应用:
logger.info(“日志信息”)
logger.error(“日志信息”)
日志封装
定义获取日志类
定义类属性 :logger = None
@classmethod
定义获取logger日志器的方法
if cls.logger is None:#判断logger是否为空,如果为空就执行以下操作
获取日志器对象
设置日志器级别
获取控制台处理器
获取文件处理器
获取格式器
将格式器添加到处理器中
将处理器添加到日志器中
return 类属性logger
注意:
1、以上条件无论是否成立,最后都会返回类属性logger;
2、当第一次调用时,条件一定成立,将类属性logger设置不为空
3、当第二次以上调用时,永远返回第一次设置的类属性对象
整体框架结构
单例模式操作日志,执行代码:
# 导包
import logging
import logging.handlers
# 创建日志类
class GetLogger():# 采用单例模式封装日志# 设置logger为Nonelogger = None
# 创建类方法@classmethoddef getLogger(cls):# 如果logger为None代码向下走,如果不是None则不执行代码,保证使用的是同一个loggerif cls.logger is None:# 实例化logger,创建日志器cls.logger = logging.getLogger()# 设置日志器的最低等级cls.logger.setLevel(logging.INFO)# 创建控制台处理器ls = logging.StreamHandler()# 创建文件处理器lht = logging.handlers.TimedRotatingFileHandler(filename = "../log/log01.log",when = "midnight",interval = 1,backupCount = 30)# 设置日志格式fmt = "%(asctime)s %(levelname)s [%(name)s] [%(filename)s (%(funcName)s:%(lineno)d] - %(message)s"# 获取日志格式器fm = logging.Formatter(fmt)# 将格式器添加到处理器中ls.setFormatter(fm)lht.setFormatter(fm)# 将处理器添加到日志器中cls.logger.addHandler(ls)cls.logger.addHandler(lht)# 返回日志器return cls.loggerif __name__ == "__main__":logger = GetLogger().getLogger()logger.info("info日志")
整体源码连接:
链接:https://pan.baidu.com/s/1MEJun0QU7PDT9LxDg5w7hw?pwd=iens
提取码:iens
web自动化笔记十六:日志收集相关推荐
- 电脑安装python3.74_python3.4学习笔记(十六) windows下面安装easy_install和pip教程
python3.4学习笔记(十六) windows下面安装easy_install和pip教程 easy_install和pip都是用来下载安装Python一个公共资源库PyPI的相关资源包的 首先安 ...
- Polyworks脚本开发学习笔记(十六)-用C#进行Polyworks二次开发
Polyworks脚本开发学习笔记(十六)-用C#进行Polyworks二次开发 Polyworks支持C#二次开发,用对应的SDK文档试着做一下开发样例. 新建一个C#项目,在解决方案中右键添加引用 ...
- Mr.J-- jQuery学习笔记(十六)--展开和收起动画折叠菜单的实现
之前写过动画的隐藏与显示:Mr.J-- jQuery学习笔记(十四)--动画显示隐藏 动画隐藏与显示的一个小demo--对联广告:Mr.J-- jQuery学习笔记(十五)--实现页面的对联广告 与动 ...
- 数据科学和人工智能技术笔记 十六、朴素贝叶斯
十六.朴素贝叶斯 作者:Chris Albon 译者:飞龙 协议:CC BY-NC-SA 4.0 伯努利朴素贝叶斯 伯努利朴素贝叶斯分类器假设我们的所有特征都是二元的,它们仅有两个值(例如,已经是独热 ...
- 【Visual C++】游戏开发笔记十六 讲解一个完整的回合制游戏demo
本系列文章由zhmxy555编写,转载请注明出处. 文章链接 http://blog.csdn.net/zhmxy555/article/details/7447864 作者:毛星云 邮箱: ...
- 【Visual C 】游戏开发笔记十六 讲解一个完整的回合制游戏demo
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 本系列文 ...
- [原]【Visual C++】游戏开发笔记十六 讲解一个完整的回合制游戏demo
本系列文章由zhmxy555编写,转载请注明出处. 文章链接 http://blog.csdn.net/zhmxy555/article/details/7447864 作者:毛星云 邮箱: ...
- 【Visual C++】游戏开发笔记十六 讲解一个完整的回合制游戏demo
本系列文章由zhmxy555编写,转载请注明出处. 文章链接 http://blog.csdn.net/zhmxy555/article/details/7447864 作者:毛星云 邮箱: ...
- web渗透笔记之前期信息收集
web渗透的前期信息收集 本人小白一枚,以下内容是学习时的笔记内容,如果有错误,还望指出. 1.Whois信息 当我们准备信息收集时,首选需要知道的是目标站的域名,然后在用whois查询查找域名所属者 ...
最新文章
- SVN提示被锁定的解决方法(转)
- java datetime和date_Java 8时间接口localDateTime和Date的对比
- 高并发软件设计的几种方式
- 通过分析一个C程序的汇编指令执行过程,理解计算机的工作。
- MVC模式和文档/视图结构
- 通过视频着色进行自监督跟踪
- Java 和 Python 解析动态 key 的 JSON 数据
- .NET开发者的机遇与Web Blazor基础(有彩蛋)
- win7设置定时锁定计算机,Win7系统锁定计算机怎么设置?Win7系统锁定计算机的设置方法...
- java excel 操作方式_Java读写Excel基本操作
- 在Hekaton里,正确选择哈希存储桶数
- java中getup用法_你还在 Java 代码中写 set/get 方法?赶快试试这款插件吧!
- Castle ActiveRecord学习实践(6):延迟加载和使用Where子句
- 衰退的爱立信,进击的华为
- Java Web实战篇-轻松提高千万级数据库查询效率
- brew 安装pip_pip brew wget 安装
- ApplePay开发
- 支付宝小程序设置服务器维护,支付宝小程序配置
- PMP项目管理与ACP敏捷管理哪一个更有用?
- 华为FreeBuds 5耳机声音变小怎么办?