python logging模块的作用及应用场景_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] - debug2020-08-03 20:36:47,104 - testLog1.py:[118] - [DEBUG] - debug# 日志文件记录如下:2020-08-03 20:36:15,982 - testLog1.py:[117] - [DEBUG] - debug2020-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==2AssertionError# 日志文件记录如下: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==2AssertionError

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持python博客。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/485931.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Nature:2020年最佳科学影像,每一张都是壁纸,每一张都是历史

文章来源:学术头条2020年是独一无二的一年。COVID-19大流行将科学推到了最前沿,并深刻影响了人们的生活。但是这一年也产生了许多与病毒无关的新影像。从薄薄的太阳能电池,到经过基因编辑的鱿鱼,下面就是Nature新闻和艺术团队评选…

Leetcode--213. 打家劫舍Ⅱ

你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都围成一圈,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚…

转 从红帽、GitHub和Docker看开源商业模式的进阶

从红帽、GitHub和Docker看开源商业模式的进阶 发表于2014-12-16 10:26| 7594次阅读| 来源http://stratechery.com/| 0 条评论| 作者Ben ThompsonDocker红帽GitHub开源CoreOS摘要:从技术角度来说,Docker无疑是可圈可点的,比如“write once run…

antimalware可以关闭吗_iPhone最好关闭这4个设置,手机流畅还省电

你抢到新款的iPhone12了吗?80%的小伙伴都会忽略的设置,你的iPhone手机最好关闭以下这4个设置。①关闭ios系统更新操作步骤:打开【设置】-【通用】-【软件更新】-【自动更新】-【下载iOS更新】,关闭即可。这样就不会莫名其妙地下载…

Leetcode--221.最大正方形

在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积。 示例: 输入: 1 0 1 0 0 1 0 1 1 1 1 1 1 1 1 1 0 0 1 0 输出: 4 思路:和最大长方形类似(可以参照https://mp.csdn.net/postedit/102420219&…

tableau连接mysql_tableau 连接mysql的操作步骤

一:下载并安装好以下应用程序:1.数据库mysql2.数据库管理工具navicat premium3.数据可视化工具tableau4.mysql对应版本的ODBC驱动包二:配置ODBC1.控制面板→系统和安全→管理工具中找到"数据源ODBC",并启动它&#xff0…

MVVM Light Toolkit使用指南

原文地址: https://blog.csdn.net/ldld1717/article/details/77040077概述MVVM Light Toolkit是一个Android MVVM 轻量级工具库,主要目的是更快捷方便的构建Android MVVM应用程序,工具库添加了一些Data Binding 不支持的属性,还有…

段永朝:界面——之内、之外与之间

来源:苇草智酷01画一个圈儿,就把平面分成圈内,圈外。这个圈儿,就成了界面。垒一道墙,就把空间分成墙里,墙外。这个墙,就成了界面。看一眼手机上的钟表,那一刻闪现的数字,…

Leetcode--5. 最长回文子串

给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。 示例 1: 输入: "babad" 输出: "bab" 注意: "aba" 也是一个有效答案。 示例 2: 输入: "cbbd" 输出: "bb"…

mysql面试考点_mysql面试知识点

1 引擎-MyISAM和InnoDB的区别a 是否支持行级锁 :MyISAM 只有表级锁(table-level locking),而InnoDB 支持行级锁(row-level locking)和表级锁,默认为行级锁。b 是否支持事务和崩溃后的安全恢复:MyISAM 强调的是性能,每次查询具有原子性,其执行…

jquery 快速入门二

---恢复内容开始--- 操作标签 样式操作 样式类 addClass();//添加指定的CSS类名。 removeClass();//移除指定的类名. hasClass();//判断样式不存在 toggleClass();//切换css类名,如果有就移除,如果没有就添加 示例:开关灯和模态框 CSS css(&q…

中国工程院《全球工程前沿2020》报告在京发布

来源:科学网作者:李晨阳12月18日上午,中国工程院《全球工程前沿2020》报告在京发布。报告围绕机械与运载工程、信息与电子工程、化工冶金与材料工程、能源与矿业工程、土木水利与建筑工程、环境与轻纺工程、农业、医药卫生、工程管理9个领域&…

Leetcode--279. 完全平方数

给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, ...)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。 示例 1: 输入: n 12 输出: 3 解释: 12 4 4 4. 示例 2: 输入: n 13 输出: 2 解释: 13 4 9. 思路&#xf…

java基础题集

1.什么是java虚拟机?为什么java被称作是“平台无关的编程语言”? java虚拟机是一个可以执行java字节码的虚拟机进程。java源文件被编译成能被java虚拟机执行的字节码文件。 java被设计成允许应用程序可以运行在任意的平台,而不需要程序员为每…

AlphaFold证明人工智能可以解决基本的科学问题

来源:IEEE电气电子工程师Gif: DeepMindTwo examples of protein targets in the free modelling category.任何人工智能的成功实施都依赖于以正确的方式提出正确的问题。这就是英国人工智能公司DeepMind(Alphabet的子公司)在利用其神经网络解…

mysql部署策略_MySQL延迟问题和数据刷盘策略流程分析

一、MySQL复制流程官方文档流程如下:MySQL延迟问题和数据刷盘策略1、绝对的延时,相对的同步2、纯写操作,线上标准配置下,从库压力大于主库,最起码从库有relaylog的写入。二、MySQL延迟问题分析1、主库DML请求频繁原因&…

Java中文件的创建

File filenew File(“text.txt”) 运行这行代码,我们会发现相应的文件夹下无法找到创建的text.txt 首先 File 类是对文件系统的映射 并不是硬盘上真实的文件 所以 new File("xxx.xxx") 只是在内存中创建File文件映射对象,而并不会…

copy a random link

题目:A linked list is given such that each node contains an additional random pointer which could point to any node in the list or null.Return a deep copy of the list.1 /**2 * Definition for singly-linked list with a random pointer.3 * struct Ra…

计算的极限(零):逻辑与图灵机

来源: 数学职业家提出问题和解决问题的人2012,图灵诞辰100周年,献给这位伟大的开拓者。计算无处不在。走进一个机房,在服务器排成的一道道墙之间,听着风扇的鼓噪,似乎能嗅出0和1在CPU和内存之间不间断的流动…

java修改list中对象的值_Java中List集合的一点总结

为什么要用接口引用指向实现类的对象?这种写法其实java多态的表现形式多态的定义:指允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式。(发送消息就是函数调用List list;是在栈区开辟一个空间…