日志记录函数以它们用来跟踪的事件的级别或严重性命名。下面描述了标准级别及其适用性(从高到低的顺序)

日志等级(level) 描述
DEBUG   最详细的日志信息,典型应用场景是 问题诊断
INFO     信息详细程度仅次于DEBUG,通常只记录关键节点信息,用于确认一切都是按照我们预期的那样进行工作
WARNING    当某些不期望的事情发生时记录的信息(如,磁盘可用空间较低),但是此时应用程序还是正常运行的
ERROR     由于一个更严重的问题导致某些功能不能正常运行时记录的信息
CRITICAL    当发生严重错误,导致应用程序不能继续运行时记录的信息

日志级别等级排序:critical > error > warning > info > debug

import logging

# 打印日志级别
def test_logging():
logging.debug('Python debug')
logging.info('Python info')
logging.warning('Python warning')
logging.error('Python Error')
logging.critical('Python critical') test_logging() #输出结果 WARNING:root:Python warning
ERROR:root:Python Error
CRITICAL:root:Python critical

设置日志显示级别

通过 logging.basicConfig() 可以设置 root 的日志级别,和日志输出格式

logging.basicConfig() 关键字参数

关键字 描述
filename 创建一个 FileHandler,使用指定的文件名,而不是使用 StreamHandler。
filemode 如果指明了文件名,指明打开文件的模式(如果没有指明 filemode,默认为 'a')。
format handler 使用指明的格式化字符串。
datefmt handler 使用指明的格式化字符串。
level 指明根 logger 的级别。
stream 使用指明的流来初始化 StreamHandler。该参数与 'filename' 不兼容,如果两个都有,'stream' 被忽略。

format 格式

格式                    描述
%(levelno)s        打印日志级别的数值
%(levelname)s   打印日志级别名称
%(pathname)s   打印当前执行程序的路径
%(filename)s     打印当前执行程序名称
%(funcName)s   打印日志的当前函数
%(lineno)d         打印日志的当前行号
%(asctime)s      打印日志的时间
%(thread)d        打印线程 ID
%(threadName)s  打印线程名称
%(process)d         打印进程 ID
%(message)s       打印日志信息

注意:Logging.basicConfig() 需要在开头就设置,在中间设置并无作用

import logging
# 更改显示消息的格式
logging.basicConfig(format='%(levelname)s:%(message)s',level=logging.DEBUG)
#logging.basicConfig(format='%(asctime)s %(message)s', datefmt='%m/%d/%Y %I:%M:%S %p')
#logging.basicConfig(filename='myapp.log',level=logging.DEBUG)
logging.debug('Python message format Debug')
logging.info('Python message format Info')
logging.warning('Python message format Warning')

  

logging 模块四大组件

组件名称  对应类名   功能描述
日志器    Logger        暴露函数给应用程序,基于日志记录器和过滤器级别决定哪些日志有效
处理器      Handler       将 logger 创建的日志记录发送到合适的目的输出
过滤器      Filter           提供了更细粒度的控制工具来决定输出哪条日志记录,丢弃哪条日志记录
格式器      Formatter    决定日志记录的最终输出格式

日志器- Logger

Logger 持有日志记录器的方法,日志记录器不直接实例化,而是通过模块级函数 logger.getlogger (name) 来实例化,使用相同的名称多次调用 getLogger() 总是会返回对相同 Logger 对象的引用。

  • 应用程序代码能直接调用日志接口。

  • Logger最常用的操作有两类:配置和发送日志消息。

  • 初始化 logger = logging.getLogger("endlesscode"),获取 logger 对象,getLogger() 方法后面最好加上所要日志记录的模块名字,配置文件和打印日志格式中的 %(name)s 对应的是这里的模块名字,如果不指定name则返回root对象。

  • logger.setLevel(logging.DEBUG),Logging 中有 NOTSET < DEBUG < INFO < WARNING < ERROR < CRITICAL这几种级别,日志会记录设置级别以上的日志

  • 多次使用相同的name调用 getLogger 方法返回同一个 looger 对象;

Logger是一个树形层级结构,在使用接口 debug,info,warn,error,critical 之前必须创建 Logger 实例:

创建方法: logger = logging.getLogger(logger_name)

创建Logger实例后,可以使用以下方法进行日志级别设置,增加处理器 Handler:

  • logger.setLevel(logging.ERROR) # 设置日志级别为 ERROR,即只有日志级别大于等于 ERROR 的日志才会输出

  • logger.addHandler(handler_name) # 为 Logger 实例增加一个处理器

  • logger.removeHandler(handler_name) # 为 Logger 实例删除一个处理器

处理器- Handler

Handler 处理器类型有很多种,比较常用的有三个,StreamHandler,FileHandler,NullHandler

StreamHandler

创建方法:sh = logging.StreamHandler(stream=None)

创建 StreamHandler 之后,可以通过使用以下方法设置日志级别,设置格式化器 Formatter,增加或删除过滤器 Filter:

ch.setLevel(logging.WARN) # 指定日志级别,低于WARN级别的日志将被忽略

ch.setFormatter(formatter_name) # 设置一个格式化器formatter

ch.addFilter(filter_name) # 增加一个过滤器,可以增加多个

ch.removeFilter(filter_name) # 删除一个过滤器

过滤器- Filter

Handlers 和 Loggers 可以使用 Filters 来完成比级别更复杂的过滤。Filter 基类只允许特定 Logger 层次以下的事件。例如用 ‘A.B’ 初始化的 Filter 允许Logger ‘A.B’, ‘A.B.C’, ‘A.B.C.D’, ‘A.B.D’ 等记录的事件,logger‘A.BB’, ‘B.A.B’ 等就不行。如果用空字符串来初始化,所有的事件都接受。

创建方法: filter = logging.Filter(name='')

格式器- Formatter

使用Formatter对象设置日志信息最后的规则、结构和内容,默认的时间格式为%Y-%m-%d %H:%M:%S 

创建方法: formatter = logging.Formatter(fmt=None, datefmt=None)

其中,fmt 是消息的格式化字符串,datefmt 是日期字符串。如果不指明 fmt,将使用 '%(message)s' 。如果不指明  datefmt,将使用 ISO8601 日期格式。  

组件之间的关联关系

  • 日志器(logger)需要通过处理器(handler)将日志信息输出到目标位置,不同的处理器(handler)可以将日志输出到不同的位置;

  • 日志器(logger)可以设置多个处理器(handler)将同一条日志记录输出到不同的位置;

  • 每个处理器(handler)都可以设置自己的过滤器(filter)实现日志过滤,从而只保留感兴趣的日志;

  • 每个处理器(handler)都可以设置自己的格式器(formatter)实现同一条日志以不同的格式输出到不同的地方。

简明了说就是:日志器(logger)是入口,真正干活儿的是处理器(handler),处理器(handler)还可以通过过滤器(filter)和格式器(formatter)对要输出的日志内容做过滤和格式化等处理操作。

  • Logger 可以包含一个或多个 Handler 和 Filter

  • Logger 与 Handler 或 Fitler 是一对多的关系

  • 一个 Logger 实例可以新增多 个 Handler,一个 Handler 可以新增多个格式化器或多个过滤器,而且日志级别将会继承。

logging 模块详解的更多相关文章

  1. Python的logging模块详解

          Python的logging模块详解 作者:尹正杰  版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.日志级别 日志级别指的是产生的日志的事件的严重程度. 设置一个级别后,严重程度 ...

  2. python logging模块详解[转]

    一.简单将日志打印到屏幕: import logging logging.debug('debug message') logging.info('info message') logging.war ...

  3. Python logging模块详解

    简单将日志打印到屏幕: import logging logging.debug('debug message') logging.info('info message') logging.warni ...

  4. Python自学笔记-logging模块详解

    简单将日志打印到屏幕: import logging logging.debug('debug message') logging.info('info message') logging.warni ...

  5. [转载]Python logging模块详解

    原文地址: http://blog.csdn.net/zyz511919766/article/details/25136485 简单将日志打印到屏幕: import logging logging. ...

  6. logging模块详解以及常见代码

    1.在django中获取客户端IP地址: if 'HTTP_X_FORWARDED_FOR' in request.META: ip = request.META['HTTP_X_FORWARDED_ ...

  7. Python同时向控制台和文件输出日志logging的方法 Python logging模块详解

    Python同时向控制台和文件输出日志logging的方法http://www.jb51.net/article/66756.htm 1 #-*- coding:utf-8 -*- 2 import ...

  8. Python中操作mysql的pymysql模块详解

    Python中操作mysql的pymysql模块详解 前言 pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同.但目前pymysql支持python3.x而后者不支持 ...

  9. python之OS模块详解

    python之OS模块详解 ^_^,步入第二个模块世界----->OS 常见函数列表 os.sep:取代操作系统特定的路径分隔符 os.name:指示你正在使用的工作平台.比如对于Windows ...

  10. python之sys模块详解

    python之sys模块详解 sys模块功能多,我们这里介绍一些比较实用的功能,相信你会喜欢的,和我一起走进python的模块吧! sys模块的常见函数列表 sys.argv: 实现从程序外部向程序传 ...

随机推荐

  1. django连接ubuntu22下的mysql8

    1.安装mysql(这里就不过多赘述了) sudo apt-get install mysql-server 2.登录mysql   (1) 在 根目录/etc/mysql/debian.cnf ,使 ...

  2. stata基础(十五)——线性回归的基本假定、估计回归系数、拟合系数

    一.回归:回归是研究变量间相互关系的方法 1.条件分布:因变量在自变量取不同值时的分布 如果因变量在自变量取不同值时的条件分布都相同,那么自变量对因变量没有影响,否则就是有影响. 比较因变量在自变量取 ...

  3. h5页面回到顶部

    1.锚点 <aname="top"></a> <ahref="#top"></a> 2.回到顶部 documen ...

  4. 如何使用css绘制三角形

    背景 用迪卡侬官方主页进行页面练习,发现头部导航栏需要使用到梯形 分析 图形分解 通过图片我们可以发现该梯形可以分解成一个长方形和一个直角三角形,长方形:110*65:直角三角形:11*65(底边*另 ...

  5. 【godis】skiplist

    skiplist 前言:在看代码时看到 ZSKIPLIST_MAXLEVEL = 32,当时并不了解 ZSKIPLIST_P 的作用,想着用 2 分法不应该层数是 64 吗?书上和他人的代码都是基于 ...

  6. Arrays.sort()降序排序

    默认的Java.util包中的Arrays.sort(),可以实现对java中的基本数据类型(byte.char.short.int.long.float.double.boolean)的数组进行升序 ...

  7. rust在windows上编译成liunx可执行程序

    一.rust编译文件 cargo build 或 cargo build --release 发布构建 二.安装 x86_64-unknown-liunx-musl target rustup tar ...

  8. android手机无线调试

    1.手机与电脑先通过usb链接2.adb devices查看是否链接成功(链接成功会显示设备列表)3.adb tcpip 5555(0-65535之间取值,默认5555输进去)5:断开数据线,查看手机 ...

  9. js判断数据类型 && 判断是否为标准json格式

    /** * 1. js判断对象的好方法 * 2. 判断是否为json格式化数据 * * Author: shujun * Date: 2020-8-09 */ import {print} from ...

  10. 原生JS点击显示/隐藏

    代码实现 HTML <div class="box box1"> <div class="btn"> <span onclick= ...