python的logging模块及应用
一、logging日志模块等级
常见log级别从高到低:
CRITICAL 》ERROR 》WARNING 》INFO 》DEBUG,默认等级为WARNING,即>=WARNING级别的log才输出。
| 日志等级(level) | 描述 |
| CRITICAL | 当发生严重错误,导致应用程序不能继续运行时记录的信息 |
| ERROR | 由于一个更严重的问题导致某些功能不能正常运行时记录的信息 |
| WARNING | 当某些不期望的事情发生时记录的信息(如,磁盘可用空间较低),但是此时应用程序还是正常运行的 |
| INFO | 信息详细程度仅次于DEBUG,通常只记录关键节点信息,用于确认一切都是按照我们预期的那样进行工作 |
| DEBUG | 最详细的日志信息,典型应用场景是 问题诊断 |
二、logging模块的使用方式介绍
logging模块提供了两种记录日志的方式:
- 第一种方式是使用logging提供的模块级别的函数
- 第二种方式是使用Logging日志系统的四大组件
其实,logging所提供的模块级别的日志记录函数也是对logging日志系统相关类的封装而已。
(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)函数用于指定“要记录的日志级别”、“日志格式”、“日志输出位置”、“日志文件的打开模式”等信息,其他几个都是用于记录各个级别日志的函数。
(2)logging模块的四大组件
| 组件 | 说明 |
|---|---|
| loggers | 提供应用程序代码直接使用的接口 |
| handlers | 用于将日志记录发送到指定的目的位置 |
| filters | 提供更细粒度的日志过滤功能,用于决定哪些日志记录将会被输出(其它的日志记录将会被忽略) |
| formatters | 用于控制日志信息的最终输出格式 |
三、自定义Logger模块类
# testLog1.py import logging
import time class Logger(): def __init__(self, logger, level=logging.DEBUG):
'''
: 自定义Logger模块类
: logger: logger名
: level: 日志级别
''' # 创建一个logger
self.logger = logging.getLogger(logger)
self.logger.setLevel(level) # 定义handler的输出格式
curr_time = time.strftime("%Y-%m-%d")
self.LogFileName = 'log' + curr_time + '.txt'
fmt = logging.Formatter('%(asctime)s - %(filename)s:[%(lineno)s] - [%(levelname)s] - %(message)s') # asctime: 日志事件发生的时间
# filename: 源文件的名称部分,包含文件后缀
# lineno: 调用日志记录函数的源代码所在的行号
# evelname: 该日志记录的文字形式的日志级别
# message: 日志记录的文本内容 # 创建一个handler, 用于写入日志文件
fh = logging.FileHandler(self.LogFileName)
fh.setLevel(logging.DEBUG)
fh.setFormatter(fmt) # 再创建一个handler,用于输出到控制台
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)
ch.setFormatter(fmt) # 给logger添加handler
self.logger.addHandler(fh)
self.logger.addHandler(ch) # level优先级
# logger.setLevel > handler.setLevel > logging.basicConfig if __name__ == "__main__":
log = Logger(__name__, level=logging.DEBUG)
log.logger.debug('debug')
log.logger.log(logging.DEBUG, 'debug') # 执行testLog1.py,则控制台输出如下:
2020-08-03 20:36:47,104 - testLog1.py:[117] - [DEBUG] - debug
2020-08-03 20:36:47,104 - testLog1.py:[118] - [DEBUG] - debug # 日志文件记录如下:
2020-08-03 20:36:15,982 - testLog1.py:[117] - [DEBUG] - debug
2020-08-03 20:36:15,982 - testLog1.py:[118] - [DEBUG] - debug
# testLog2.py from testLog1 import Logger
import traceback log = Logger(__name__)
def func():
try:
assert 1==2
except Exception:
log.logger.info('测试失败,输出信息如下:{}'.format(traceback.format_exc()))
# traceback.format_exc() 会返回异常信息的字符串 if __name__ == "__main__":
func() # 执行testLog2.py,则控制台输出如下:
2020-08-03 20:43:44,907 - testLog2.py:[11] - [INFO] - 测试失败,输出信息如下:Traceback (most recent call last):
File "E:/imooc/testLog.py", line 9, in func
assert 1==2
AssertionError # 日志文件记录如下:
2020-08-03 20:43:44,907 - testLog2.py:[11] - [INFO] - 测试失败,输出信息如下:Traceback (most recent call last):
File "E:/imooc/testLog.py", line 9, in func
assert 1==2
AssertionError
参考:https://www.cnblogs.com/yyds/p/6901864.html
python的logging模块及应用的更多相关文章
- Python之logging模块
一.引言 之前在写一些小程序的时候想把日志内容打到文件中,所以就自己写了一个logger.py的程序,如下: #!/usr/bin/python # -*- coding=utf-8 -*- impo ...
- python的logging模块
python提供了一个日志处理的模块,那就是logging 导入logging模块使用以下命令: import logging logging模块的用法: 1.简单的将日志打印到屏幕上 import ...
- python的logging模块之读取yaml配置文件。
python的logging模块是用来记录应用程序的日志的.关于logging模块的介绍,我这里不赘述,请参见其他资料.这里主要讲讲如何来读取yaml配置文件进行定制化的日志输出. python要读取 ...
- python中logging模块的用法
很多程序都有记录日志的需求,并且日志中包含的信息即有正常的程序访问日志,还可能有错误.警告等信息输出,python的logging模块提供了标准的日志接口,你可以通过它存储各种格式的日志,loggin ...
- python基础--logging模块
很多程序都有记录日志的需求,并且日志中包含的信息即有正常的程序访问日志,还可能有错误.警告等信息输出,python的logging模块提供了标准的日志接口,你可以通过它存储各种格式的日志,loggin ...
- Python中logging模块的基本用法
在 PyCon 2018 上,Mario Corchero 介绍了在开发过程中如何更方便轻松地记录日志的流程. 整个演讲的内容包括: 为什么日志记录非常重要 日志记录的流程是怎样的 怎样来进行日志记录 ...
- python之logging模块简单用法
前言: python引入logging模块,用来记录自己想要的信息.print也可以输入日志,但是logging相对print来说更好控制输出在哪个地方.怎么输出以及控制消息级别来过滤掉那些不需要的信 ...
- Python的logging模块详解
Python的logging模块详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.日志级别 日志级别指的是产生的日志的事件的严重程度. 设置一个级别后,严重程度 ...
- Python的logging模块基本用法
Python 的 logging 模块的简单用法 在服务器部署时,往往都是在后台运行.当程序发生特定的错误时,我希望能够在日志中查询.因此这里熟悉以下 logging 模块的用法. logging 模 ...
- python(logging 模块)
1.logging 模块的日志级别 DEBUG:最详细的日志信息,典型应用场景是 问题诊断 INFO:信息详细程度仅次于DEBUG,通常只记录关键节点信息,用于确认一切都是按照我们预期的那样进行工作 ...
随机推荐
- web安全之python延时注入
通过python代码编写的一个延时的sql注入脚本 首先我们导入了request请求库和string类型的库,通过库我们可以通过访问请求的方式访问url链接. url链接为注入链接地址这里我随便写的一 ...
- 【AHOI2009】 维护序列 - 线段树
题目描述 老师交给小可可一个维护数列的任务,现在小可可希望你来帮他完成. 有长为N的数列,不妨设为a1,a2,…,aN .有如下三种操作形式: (1)把数列中的一段数全部乘一个值; (2)把数列中的一 ...
- OAuth2.0分布式系统环境搭建
好好学习,天天向上 本文已收录至我的Github仓库DayDayUP:github.com/RobodLee/DayDayUP,欢迎Star,更多文章请前往:目录导航 介绍 OAuth(开放授权)是一 ...
- python数据类型分类(可变(不可变)数据类型)
一:python数据类型的分类: 可变(不可哈希)的数据类型: list 列表 dict 字典 set 集合 不可变(可哈希)的数据类型: str 字符串 bool 布尔型 int 整型 tuple ...
- JavaScript设计模式之单例模式【惰性单例】
在提高开发水平,往中高级前端工程师中,利用设计模式是必不可少的一条道路.掌握设计模式的思想远远比硬套重要,因为设计模式是一种思想,不局限于开发语言.但实际上由于语言的特性不同,往往在实现的时候会有不少 ...
- java容器源码分析及常见面试题笔记
概览 容器主要包括 Collection 和 Map 两种,Collection 存储着对象的集合,而 Map 存储着键值对(两个对象)的映射表. List Arraylist: Object数组 ...
- GRMS_README
基于Hadoop的商品推荐系统 基于特征:基于行为:具有了一定的历史特征. 基于用户: 基于商品: 推荐结果=用户的购买向量*物品的相似度矩阵 物品的相似度:物品的共现次数 1.项目名:GRMS2.添 ...
- 如何运用excel或spss等软件统计大量纸质问卷?
在用纸质问卷进行数据收集时,总是避不开一个问题,就是如何把数据快速准确的进行统计分析.这里提供一个方法,包括以下几个步骤: 一.录入数据 二.上传数据 三.分析数据 一.录入数据 首先把纸质问卷 ...
- python3.6和pip3:Ubuntu下安装升级与踩坑之路
本文以Ubuntu16.x系统为例,演示如何安装python3.6和相应环境.安装Python3的机器必须要能访问外网才能进行如下操作! 1. 安装方式 在Ubuntu下安装python有两种方式: ...
- oracle impdp 数据迁移 至RDS 亚马逊云
背景: 公司年底打算将aws rds11.2.0.4 oracle 数据库升级到19c,所以需要进行升级测试,所以需要我把线上的库数据迁移到一台测试的rds oracle 亚马逊云的数据库中,然后升级 ...