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

日志级别:是指日志信息的优先级、重要性或者严重程度
    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自动化笔记十六:日志收集相关推荐

  1. 电脑安装python3.74_python3.4学习笔记(十六) windows下面安装easy_install和pip教程

    python3.4学习笔记(十六) windows下面安装easy_install和pip教程 easy_install和pip都是用来下载安装Python一个公共资源库PyPI的相关资源包的 首先安 ...

  2. Polyworks脚本开发学习笔记(十六)-用C#进行Polyworks二次开发

    Polyworks脚本开发学习笔记(十六)-用C#进行Polyworks二次开发 Polyworks支持C#二次开发,用对应的SDK文档试着做一下开发样例. 新建一个C#项目,在解决方案中右键添加引用 ...

  3. Mr.J-- jQuery学习笔记(十六)--展开和收起动画折叠菜单的实现

    之前写过动画的隐藏与显示:Mr.J-- jQuery学习笔记(十四)--动画显示隐藏 动画隐藏与显示的一个小demo--对联广告:Mr.J-- jQuery学习笔记(十五)--实现页面的对联广告 与动 ...

  4. 数据科学和人工智能技术笔记 十六、朴素贝叶斯

    十六.朴素贝叶斯 作者:Chris Albon 译者:飞龙 协议:CC BY-NC-SA 4.0 伯努利朴素贝叶斯 伯努利朴素贝叶斯分类器假设我们的所有特征都是二元的,它们仅有两个值(例如,已经是独热 ...

  5. 【Visual C++】游戏开发笔记十六 讲解一个完整的回合制游戏demo

    本系列文章由zhmxy555编写,转载请注明出处. 文章链接  http://blog.csdn.net/zhmxy555/article/details/7447864 作者:毛星云    邮箱:  ...

  6. 【Visual C 】游戏开发笔记十六 讲解一个完整的回合制游戏demo

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 本系列文 ...

  7. [原]【Visual C++】游戏开发笔记十六 讲解一个完整的回合制游戏demo

    本系列文章由zhmxy555编写,转载请注明出处. 文章链接  http://blog.csdn.net/zhmxy555/article/details/7447864 作者:毛星云    邮箱:  ...

  8. 【Visual C++】游戏开发笔记十六 讲解一个完整的回合制游戏demo

    本系列文章由zhmxy555编写,转载请注明出处. 文章链接  http://blog.csdn.net/zhmxy555/article/details/7447864 作者:毛星云    邮箱:  ...

  9. web渗透笔记之前期信息收集

    web渗透的前期信息收集 本人小白一枚,以下内容是学习时的笔记内容,如果有错误,还望指出. 1.Whois信息 当我们准备信息收集时,首选需要知道的是目标站的域名,然后在用whois查询查找域名所属者 ...

最新文章

  1. SVN提示被锁定的解决方法(转)
  2. java datetime和date_Java 8时间接口localDateTime和Date的对比
  3. 高并发软件设计的几种方式
  4. 通过分析一个C程序的汇编指令执行过程,理解计算机的工作。
  5. MVC模式和文档/视图结构
  6. 通过视频着色进行自监督跟踪
  7. Java 和 Python 解析动态 key 的 JSON 数据
  8. .NET开发者的机遇与Web Blazor基础(有彩蛋)
  9. win7设置定时锁定计算机,Win7系统锁定计算机怎么设置?Win7系统锁定计算机的设置方法...
  10. java excel 操作方式_Java读写Excel基本操作
  11. 在Hekaton里,正确选择哈希存储桶数
  12. java中getup用法_你还在 Java 代码中写 set/get 方法?赶快试试这款插件吧!
  13. Castle ActiveRecord学习实践(6):延迟加载和使用Where子句
  14. 衰退的爱立信,进击的华为
  15. Java Web实战篇-轻松提高千万级数据库查询效率
  16. brew 安装pip_pip brew wget 安装
  17. ApplePay开发
  18. 支付宝小程序设置服务器维护,支付宝小程序配置
  19. PMP项目管理与ACP敏捷管理哪一个更有用?
  20. 华为FreeBuds 5耳机声音变小怎么办?

热门文章

  1. vue移动端自适应布局
  2. 利用Python爬一下赵丽颖的新浪微博内容和评论
  3. thinkpad 有线键盘(外接键盘)小红点键盘驱动下载
  4. 05-iOS自动化常用命令
  5. 湖南卫视直播---流畅高清
  6. 拜占庭容错共识(PBFT)
  7. Java培训 2nd
  8. 回溯法实例详解(转)
  9. 如何靠打工实现年薪百万?我们用数据帮你探探路 | DT数说
  10. MySQL锁机制全面解析