LOG

  • https://www.cnblogs.com/yyds/p/6901864.html
  • logging
  • logging模块提供模块级别的函数记录日志
  • 包括四大组件

1. 日志相关概念

  • 日志
  • 日志的级别(level)
    • 不同的用户关注不同的程序信息
    • DEBUG
    • INFO
    • NOTICE
    • WARNING
    • ERROR
    • CRITICAL
    • ALERT
    • EMERGENCY
  • IO操作=>不要频繁操作
  • LOG的作用
    • 调试
    • 了解软件的运行情况
    • 分析定位问题
  • 日志信息
    • time
    • 地点
    • level
    • 内容
  • 成熟的第三方日志
    • log4j
    • log4php
    • logging

2 Logging模块

  • 日志级别

    • 级别可自定义
    • DEBUG
    • INFO
    • WARNING
    • ERROR
    • CRITICAL
  • 初始化/写日志实例需要指定级别, 只有当级别等于或高于指定级别才被记录
  • 使用方式
    • 直接使用logging(封装了其他组件)
    • loging四大组件直接定制

2.1 logging模块级别的日志

  • 使用以下几个函数

    • logging.debug(msg, *args, **kwargs) 创建一条严重级别为DEBUG的日志记录
    • logging.info(msg, *args, **kwargs) 创建一条严重级别为INFO的日志记录
    • logging.warning(msg, *args, **kwargs) 创建一条严重级别为WARNING的日志记录
    • logging.error(msg, *args, **kwargs) 创建一条严重级别为ERROR的日志记录
    • logging.critical(msg, *args, **kwargs) 创建一条严重级别为CRITICAL的日志记录
    • logging.log(level, *args, **kwargs) 创建一条严重级别为level的日志记录
    • logging.basicConfig(**kwargs) 对root logger进行一次性配置
  • logging.basicConfig(**kwargs) 对root logger进行一次性配置

    • 只在第一次调用的时候起作用
    • 不配置logger则使用默认值
      • 输出: sys.stderr
      • 级别: WARNING
      • 格式: level:log_name:content
  • 案例 01

  • format参数

      asctime 	%(asctime)s 	日志事件发生的时间--人类可读时间,如:2003-07-08 16:49:45,896
    created %(created)f 日志事件发生的时间--时间戳,就是当时调用time.time()函数返回的值
    relativeCreated %(relativeCreated)d 日志事件发生的时间相对于logging模块加载时间的相对毫秒数(目前还不知道干嘛用的)
    msecs %(msecs)d 日志事件发生事件的毫秒部分
    levelname %(levelname)s 该日志记录的文字形式的日志级别('DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL')
    levelno %(levelno)s 该日志记录的数字形式的日志级别(10, 20, 30, 40, 50)
    name %(name)s 所使用的日志器名称,默认是'root',因为默认使用的是 rootLogger
    message %(message)s 日志记录的文本内容,通过 msg % args计算得到的
    pathname %(pathname)s 调用日志记录函数的源码文件的全路径
    filename %(filename)s pathname的文件名部分,包含文件后缀
    module %(module)s filename的名称部分,不包含后缀
    lineno %(lineno)d 调用日志记录函数的源代码所在的行号
    funcName %(funcName)s 调用日志记录函数的函数名
    process %(process)d 进程ID
    processName %(processName)s 进程名称,Python 3.1新增
    thread %(thread)d 线程ID
    threadName %(thread)s 线程名称

2.1 logging模块的处理流程

  • 四大组件

    • 日志器(Logger): 产生日志的一个接口
    • 处理器(Handler):把产生的日志发送到相应的目的地
    • 过滤器(Filter): 更精细的控制那些日志输出
    • 格式器(Formatter): 对输出信息进行格式化
  • Logger

    • 产生一个日志

    • 操作

       Logger.setLevel() 	设置日志器将会处理的日志消息的最低严重级别
      Logger.addHandler() 和 Logger.removeHandler() 为该logger对象添加 和 移除一个handler对象
      Logger.addFilter() 和 Logger.removeFilter() 为该logger对象添加 和 移除一个filter对象
      Logger.debug: 产生一条debug级别的日志,同理,info,error,等
      Logger.exception(): 创建类似于Logger.error的日志消息
      Logger.log():获取一个明确的日志level参数类创建一个日志记录
    • 如何得到一个logger对象

      • 实例化
      • logging.getLogger()
  • Handler

    • 把log发送到制定位置

    • 方法

      • setLevel
      • setFormat
      • addFilter, removeFilter
    • 不需要直接使用,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地址
      logging.NullHandler 该Handler实例会忽略error messages,通常被想使用logging的library开发者使用来避免'No handlers could be found for logger XXX'信息的出现。
  • Format类

    • 直接实例化
    • 可以继承Format添加特殊内容
    • 三个参数
      • fmt:指定消息格式化字符串,如果不指定该参数则默认使用message的原始值
      • datefmt:指定日期格式字符串,如果不指定该参数则默认使用"%Y-%m-%d %H:%M:%S"
      • style:Python 3.2新增的参数,可取值为 ‘%’, ‘{‘和 ‘$’,如果不指定该参数则默认使用’%’
  • Filter类

    • 可以被Handler和Logger使用
    • 控制传递过来的信息的具体内容
# 需求:
'''
1、 要求所有级别的所有日志都写入磁盘文件中
2、 all.log文件中记录所有的日志信息,日志格式为:日期和时间- 日志级别-日志信息
3、 error.log文件中单独记录error及以上级别的日志信息,日志格式为:日期和时间- 日志级别- 文件名[:行号]- 日志信息
4、 要求all.log在每天凌晨进行日志切割 分析:
1)要记录所有级别的日志,因此日志的有效level需要设置为最低级别--DEBUG
2)日志需要被发送到两个不同的目的地,因此需要为日志器设置两个handler;另外,两个目的地都是磁盘文件,因此这两个handler都是与FileHandler相关的;
3)all.log要求按照时间进行日志切割,因此他需要用logging.handlers.TimedRotatingFileHandler; 而error.log没有要求日志切割,因此可以使用FileHandler;
4)两个日志文件的格式不同,因此需要对这两个handler分别设置格式器;
''' import logging
import logging.handlers
import datetime # 定义logger
logger = logging.getLogger('mylogger')
logger.setLevel(logging.DEBUG) rf_handler = logging.handlers.TimedRotatingFileHandler('all.log', when='midnight', interval=1, backupCount=7, atTime=datetime.time(0, 0, 0, 0))
rf_handler.setFormatter(logging.Formatter("%(asctime)s - %(levelname)s - %(message)s")) f_handler = logging.FileHandler('error.log')
f_handler.setLevel(logging.ERROR)
f_handler.setFormatter(logging.Formatter("%(asctime)s - %(levelname)s - %(filename)s[:%(lineno)d] - %(message)s")) # 把相应的处理器组装到logger上
logger.addHandler(rf_handler)
logger.addHandler(f_handler) logger.debug('debug message')
logger.info('info message')
logger.warning('warning message')
logger.error('error message')
logger.critical('critical message')

Python LOG-日志的更多相关文章

  1. python - log日志

    # -*- coding:utf-8 -*- ''' @project: jiaxy @author: Jimmy @file: study_logging.py @ide: PyCharm Comm ...

  2. Python Django log日志

    log日志 log开发日志 一.创建项目 1.python -m venv ll_env # 创建虚拟环境 2.source ll_env/bin/activate # 激活虚拟环境 3.pip in ...

  3. python打印日志log

    整理一个python打印日志的配置文件,是我喜欢的格式. # coding:utf-8 # 2019/11/7 09:19 # huihui # ref: import logging LOG_FOR ...

  4. python 读取 log日志的编码问题

    1.我要读取log日志的”执行成功”的个数,log日志编码格式为GBK 2.显示报错,大致意思是说utf-8的代码不能解析log日志 3.后来想想把log日志用GBK编码读出来,写到新文件中,用utf ...

  5. Atitit.log日志技术的最佳实践attilax总结

    Atitit.log日志技术的最佳实践attilax总结 1. 日志的意义与作用1 1.1. 日志系统是一种不可或缺的单元测试,跟踪调试工具1 2. 俩种实现[1]日志系统作为一种服务进程存在 [2] ...

  6. python log

    python的日志模块为logging,它可以将我们想要的信息输出保存到一个日志文件中. # cat log import logging logging.debug('This is debug m ...

  7. python logging 日志轮转文件不删除问题

    前言 最近在维护项目的python项目代码,项目使用了 python 的日志模块 logging, 设定了保存的日志数目, 不过没有生效,还要通过contab定时清理数据. 分析 项目使用了 logg ...

  8. Python之日志处理(logging模块)

    本节内容 日志相关概念 logging模块简介 使用logging提供的模块级别的函数记录日志 logging模块日志流处理流程 使用logging四大组件记录日志 配置logging的几种方式 向日 ...

  9. python标准日志模块logging及日志系统设计

    最近写一个爬虫系统,需要用到python的日志记录模块,于是便学习了一下. python的标准库里的日志系统从Python2.3开始支持.只要import logging这个模块即可使用.如果你想开发 ...

  10. Python logging日志系统

    写我小小的日志系统 配置logging有以下几种方式: 1)使用Python代码显式的创建loggers, handlers和formatters并分别调用它们的配置函数: 2)创建一个日志配置文件, ...

随机推荐

  1. 5.Vue前后端交互

    一.前后端交互模式 1.1 接口调用方式 原生ajax 基于JQuery的ajax fetch axios 返回一个完整的HTML页面 也可以只返回特定格式的数据,比如json 1.2 URL地址格式 ...

  2. Windows下fmt库的链接与使用

    下载源码. 使用mingw编译源码.注意设置cmake文件的产生路径.pkgconfig文件的产生路径(windows下用不到产生的pc文件).库的安装路径. make -j8 install. 新建 ...

  3. 使用 netstat 命令监视网络状态

    在linux 系统网络出现问题时可以使用netstat -s 来分析问题 使用 netstat 命令监视网络状态 netstat 命令生成包含网络状态和协议统计信息的显示内容.可以通过表格形式显示 T ...

  4. 【MSSQL】数据类型的转换

    类型转换 https://learn.microsoft.com/zh-cn/sql/t-sql/data-types/data-type-conversion-database-engine?vie ...

  5. For循环用法-打印乘法表

      for循环可以遍历某一对象(遍历:通俗点说,就是把这个循环中的第一个元素到最后一个元素依次访问一次).for循环的结构如下 具体例子打印乘法表: #打印乘法表: for i in range(1, ...

  6. JMeter压测脚本实例:单接口

    新建测试计划 添加线程组 添加HTTP请求 配置该请求相关参数 1.请求头部信息 ①HTTP请求同级线程组下添加HTTP信息头部管理器 ②填充该请求所需的头部信息 2.请求体 选中之前增加的HTTP请 ...

  7. vsftpd2.3.4 后门笑脸漏洞

    漏洞概要 在vsftpd 2.3.4版本中,在登录输入用户名时输入:)类似于笑脸的符号,会导致服务处理开启6200后门端口,直接执行系统命令 漏洞利用 攻击机:kali 2022 msfconsole ...

  8. 痞子衡嵌入式:我为2021 TencentOS Tiny AIoT应用创新大赛做了场直播培训

    TencentOS Tiny AIoT 应用创新大赛是腾讯 TencentOS 团队联合恩智浦半导体.安谋科技(Arm China)发起的线上开发者活动,主要面向中小企业嵌入式工程师.广大嵌入式开发者 ...

  9. 浅谈js防抖和节流

    防抖和节流是处理高频触发最常见的优化方式,对性能提升有很大的帮助. 防抖:将多次的高频操作优化为只在最后一次执行,应用场景如:输入框,只需在最后一次输入进行校验即可. 节流:保证每隔一段时间只执行一次 ...

  10. pyinstall打包工具使用简介

    使用pyinstall进行多个文件打包,直接打包主入口文件即可 pyinstaller MainUI.py -F -n ServerMonitorv200 -i PIC.ico -w 此处MainUI ...