logging模块是Python中内置的很强大的一个日志模块,它可以帮我们记录程序运行的情况,对于后续排错有很好的帮助。

logging模块定义了下表所示的日志级别,按照严重程度由低到高排列:

级别 使用时机
DEBUG 详细信息,常用来打印
INFO 程序正常运行过程中产生的信息
WARNING 告诉用户,虽然程序正常运行,但是可能会产生错误
ERROR 由于很严重的问题,程序不能执行功能
CRITICAL 严重错误,程序已经不能继续运行

说明:默认情况下的级别是WARNING,表示只有WARNING和比WARNING严重的事件才会被记录。

1.基本用法

# -*- coding:utf- -*-

import logging

logging.info("info message")
logging.debug("debug message")
logging.warning("warn message")
logging.error("error message")
logging.critical("critical message") ------输出内容------- WARNING:root:warn message
ERROR:root:error message
CRITICAL:root:critical message

从上面的结果中可以看出,默认情况下,logging模块是将输出的结果直接打印到屏幕上的,而且info和debug级别的日志都没有打印,即默认情况下,只有级别大于debug的日志才能输出,输出日志的格式“日志级别:实例名:日志信息”。

那么如何将日志输出到文件中呢?

如果需要将日志输出到文件中,在调用logging模块记录日志前,需要做个简单的配置:

# -*- coding:utf- -*-

import logging

# 设置日志输出的文件和日志的等级
logging.basicConfig(filename
="logger.log", level=logging.INFO)
logging.info("info message")
logging.debug("debug message")
logging.warning("warn message")
logging.error("error message")
logging.critical("critical message")

查看生成的logger.log文件内容,大于等于info级别的日志均输出:

INFO:root:info message
WARNING:root:warn message
ERROR:root:error message
CRITICAL:root:critical message

 2.更加完善的日志功能

Logger,Handler,Formatter,Filter是日志模块的几个基本概念:

Logger:记录器,提供日志相关功能的调用接口。

Handler:处理器,将记录器产生的日志发送到合适的目的地(文件或者控制台)。

Filter:过滤器,它可以控制输出哪些日志记录。

Formatter:格式化器,设置最终输出日志记录的格式。

1)Logger,是日志记录功能的载体

# -*- coding:utf- -*-

import logging

logger = logging.getLogger("log_name")
logger.debug("debug message")
logger.info("info message")
logger.warning("warn message")
logger.error("error message")
logger.critical("critical message")

说明:Logger对象不能直接实例化,而是通过logging.getLogger(name)来创建Logger实例。

2)Handler,将日志设置为指定的输出

我们在实际的开发过程中经常会希望把所有的日志都输出到log文件中,把日志等级等于和高于ERROR的信息输出到控制台,日志等级为CRITICAL的信息邮件通知,这样的话,需要设置三个Handler,然后通过Logger对象的addHandler()方法添加多个Handler,但是我们添加Handler,只能是Handler的子类对象,常用的有StreamHandler,FileHandler,NullHandler。

3)Formatter,格式化输出

该类可以直接初始化对象,即formatter = logging.Formatter(fmt=None,datefmt=None),fmt为修改日志格式,datefmt为修改时间格式,默认的日志格式为:%(asctime)s - %(levelname)s - %(message)s,默认的时间格式为%Y-%m-%d %H:%M:%S。

fmt的参数可以为:

属性 格式 描述
asctime %(asctime)s 日志产生的时间,默认为2019-03-30 20:09:12,333
filename %(filename)s 生成日志的程序名
funcName %(funcName)s 调用日志的函数名
levelname %(levelname)s 日志级别
lineno %(lineno)d 日志针对的代码行号
message %(message)s 具体的日志信息

4)Filter,控制哪些日志可以输出

默认情况下,filter只允许指定logger层级下的日志消息通过过滤,例如:filter=logging.Filter('A.B'),则logger'A.B','A.B.C',可以通过过滤,但是'A.BB'不能通过,如果以空字符串初始化filter,则所有的日志消息均可以通过过滤。

说明:Filter在日志功能配置中不是必须的,如果对日志消息过滤需求比较负责再使用就行。

3.日志模块的使用

通过日志文件配置日志时,配置文件通常以.ini后缀名,日志模块使用logging.config.fileConfig('config.ini'):

##############################
[loggers]
keys=root,example01
[logger_root]
level=DEBUG
handlers=consoleHandler
[logger_example01]
level=INFO
handlers=consoleHandler
qualname=simpleExample
propagate=
##############################
[handlers]
keys=consoleHandler
[handler_consoleHandler]
class=StreamHandler
level=DEBUG
formatter=exampleFormatter
args=(sys.stdout,)
##############################
[formatters]
keys=exampleFormatter
[formatter_exampleFormatter]
format=%(asctime)s - %(filename)s - [line:%(lineno)d] - %(levelname)s - %(message)s
##############################

demo.py

# -*- coding:utf- -*-

import logging
import logging.config
from os import path logging.config.fileConfig("config.ini") logger = logging.getLogger("root") logger.debug("debug message")
logger.info("info message")
logger.warning("warn message")
logger.error("error message")
logger.critical("critical message")

第十一篇 logging模块的更多相关文章

  1. Python进阶(十一)----包,logging模块

    Python进阶(十一)----包,logging模块 一丶包的使用 什么是包: ​ 包是通过使用 .模块名的方式组织python模块名称空间的方式. 通俗来说,含有一个__init__.py文件的文 ...

  2. Python之路(第十七篇)logging模块

    一.logging模块 (一).日志相关概念 日志是一种可以追踪某些软件运行时所发生事件的方法.软件开发人员可以向他们的代码中调用日志记录相关的方法来表明发生了某些事情.一个事件可以用一个可包含可选变 ...

  3. 第二十三篇 logging模块(******)

    日志非常重要,而且非常常用,可以通过logging模块实现. 热身运动 import logging logging.debug("debug message") logging. ...

  4. Python学习【第十一篇】模块(1)

    模块 模块让你能够有逻辑地组织你的Python代码段. 把相关的代码分配到一个模块里能让你的代码更好用,更易懂. 模块也是Python对象,具有随机的名字属性用来绑定或引用. 简单地说,模块就是一个保 ...

  5. 接口测试基础——第4篇logging模块

    Logging:日志记录是为了跟踪记录软件运行时,发生的事件,包括出错,提示信息等等. log日志级别:日志级别大小关系为:CRITICAL > ERROR > WARNING > ...

  6. Python进阶【第十一篇】模块(下)之常用模块

    内置模块是Python自带的功能,在使用内置模块相应的功能时,需要[先导入]再[使用] 一.time模块 在Python中,通常有这几种方式来表示时间: 时间戳(timestamp):通常来说,时间戳 ...

  7. Python之路(第二十一篇) re模块

    一.re模块 正则表达式本身是一种小型的.高度专业化的编程语言,正则表达式就是字符串的匹配规则,在多数编程语言里都有相应的支持,python里对应的模块是re,正则表达式模式被编译成一系列的字节码,然 ...

  8. Python学习笔记——基础篇【第六周】——logging模块

    常用模块之logging 用于便捷记录日志且线程安全的模块 import logging logging.basicConfig(filename='log.log', format='%(ascti ...

  9. (转)一篇写的简明易懂的logging模块

    转:http://kenby.iteye.com/blog/1162698 一.从一个使用场景开始 开发一个日志系统, 既要把日志输出到控制台, 还要写入日志文件 import logging # 创 ...

随机推荐

  1. gevent异步,io自动切换

    #!/usr/bin/env python # encoding: utf-8  # Date: 2018/6/19 # # from gevent import monkey  # 这俩行必须放在首 ...

  2. Mysql提权

    获取最高用户root的密码 获取方式:数据库配置文件.端口破解口令.下载数据库文件获取等1.数据库配置文件config,conn,data,sql,include,common,inc等命名文件2.数 ...

  3. js操作history

    js操作history pushState pushState只会在当前history中添加一条记录,并不会刷新浏览器 history.pushState({}, "my title&quo ...

  4. java成神之——文件IO

    文件I/O Path Files File类 File和Path的区别和联系 FileFilter FileOutputStream FileInputStream 利用FileOutputStrea ...

  5. 第三章 服务治理: Spring Cloud Eureka

    Spring Cloud Eureka是 Spring Cloud Netflix微服务套件中的一部分,它基于Netflix Eureka做了二次封装,主要负责完成微服务架构中的服务治理功能 服务治理 ...

  6. DIKW模型与数据工程

    DIKW 体系 DIKW体系是关于数据.信息.知识及智慧的体系,可以追溯至托马斯·斯特尔那斯·艾略特所写的诗--<岩石>.在首段,他写道:“我们在哪里丢失了知识中的智慧?又在哪里丢失了信息 ...

  7. scikit-learn和tensorflow的区别

    1.功能不同 Scikit-learn(sklearn)的定位是通用机器学习库,而TensorFlow(tf)的定位主要是深度学习库.一个显而易见的不同:tf并未提供sklearn那种强大的特征工程, ...

  8. linux中ftp配置文件详解

    vsftpd配置文件采用"#"作为注释符,以"#"开头的行和空白行在解析时将被忽略,其余的行被视为配置命令行,每个配置命令的"="两边不要留 ...

  9. linux下编译wpa_supplicant&nbsp;…

    linux下编译wpa_supplicant 收藏 前一段时间只在vs2005下编译成功过.经过近一段时间的琢磨,今天终于在linux下成功编译了wpa_supplicant. 挺简单的事情折腾了这么 ...

  10. Pacemaker实现双机热备

    在互联网高速发展的今天,尤其在电子商务的发展,要求服务器能够提供不间断服务.在电子商务中,如果服务器宕机,造成的损失是不可估量的.要保证服务器不间断服务,就需要对服务器实现冗余.在众多的实现服务器冗余 ...