首页 > 编程语言 >Python学习 -- logging模块

Python学习 -- logging模块

时间:2023-09-07 11:35:57浏览次数:56  
标签:logging 记录 Python message -- handler logger 日志

logging 模块是 Python 中用于记录日志的标准库,它提供了丰富的功能,可以帮助开发者进行日志记录和管理。以下是关于logging模块的详细使用方式,包括日志级别、处理流程、Logger 类、Handler 类、Filter 类、Formatter 类以及模块中常用函数等内容。

1. 日志级别

logging 模块定义了以下几个日志级别,按照递增的重要性排列:
DEBUG: 最详细的日志信息,通常用于调试目的。
INFO: 用于确认程序正常运行。
WARNING: 表示可能存在问题,但程序仍然正常运行。
ERROR: 用于标识出现错误,程序可能无法正常运行。
CRITICAL: 表示严重的错误,可能导致程序崩溃。

2. 处理流程

创建一个 Logger 对象,用于记录日志。

创建一个或多个 Handler 对象,用于指定日志记录的输出目标(例如文件、控制台等)。

可选地创建一个或多个 Filter 对象,用于过滤需要记录的日志记录。

可选地创建一个 Formatter 对象,用于指定日志记录的格式。

3. Logger 类

Logger 类是主要的日志记录器,用于记录日志消息。

import logging
# 创建一个Logger对象
logger = logging.getLogger("my_logger")

4. Handler 类

Handler 类负责将日志消息发送到指定的输出目标。

# 创建一个文件处理器
file_handler = logging.FileHandler("my_log.log")
# 创建一个控制台处理器
console_handler = logging.StreamHandler()

5. Filter 类

Filter 类用于过滤特定的日志记录。

class MyFilter(logging.Filter):
    def filter(self, record):
        return "important" in record.getMessage()
logger.addFilter(MyFilter())

6. Formatter 类

Formatter 类用于指定日志记录的格式。

# 创建一个自定义格式
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
# 为处理器设置格式
file_handler.setFormatter(formatter)
console_handler.setFormatter(formatter)

7. 常用函数

logger.setLevel(level)

设置日志记录器的最低日志级别,只有达到该级别的日志才会被记录。

logger.setLevel(logging.DEBUG)

logger.addHandler(handler)

为日志记录器添加处理器,指定日志的输出目标。

logger.addHandler(file_handler)
logger.addHandler(console_handler)
logger.debug(msg), logger.info(msg), logger.warning(msg), logger.error(msg), logger.critical(msg)

分别用于记录不同级别的日志消息。

logger.debug("This is a debug message.")
logger.info("This is an info message.")
logger.warning("This is a warning message.")
logger.error("This is an error message.")
logger.critical("This is a critical message.")

完整示例

以下是一个完整的示例,演示如何使用 logging 模块进行日志记录:

import logging
# 创建一个Logger对象
logger = logging.getLogger("my_logger")
logger.setLevel(logging.DEBUG)
# 创建一个文件处理器
file_handler = logging.FileHandler("my_log.log")
# 创建一个控制台处理器
console_handler = logging.StreamHandler()
# 创建一个自定义格式
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
file_handler.setFormatter(formatter)
console_handler.setFormatter(formatter)
# 添加处理器到Logger
logger.addHandler(file_handler)
logger.addHandler(console_handler)
# 创建一个自定义Filter,过滤带有"important"关键字的日志记录
class MyFilter(logging.Filter):
    def filter(self, record):
        return "important" in record.getMessage()
logger.addFilter(MyFilter())
# 记录不同级别的日志
logger.debug("This is a debug message.")
logger.info("This is an info message.")
logger.warning("This is a warning message.")
logger.error("This is an error message.")
logger.critical("This is a critical message.")

这个示例演示了如何创建 Logger、Handler、Filter、Formatter 并使用它们来记录不同级别的日志消息。通过灵活地使用 logging 模块,您可以更好地管理和调试您的应用程序。

Python学习 -- logging模块_记录日志



标签:logging,记录,Python,message,--,handler,logger,日志
From: https://blog.51cto.com/u_15288375/7395413

相关文章

  • 技术分享 | 强化学习,让机器像人类一样自我学习
    如果说近年来有什么是各行各业共通的话题,那就一定是强化学习,这是一个让机器能够像人类一样通过与环境互动来学习和改进自己决策的领域。它不仅令人兴奋,而且具有革命性的潜力,可以改变我们生活和工作的方式。随着计算能力的不断增强和数据的丰富性,强化学习正迅速发展,各大互联网企业也......
  • 无涯教程-JavaScript - BESSELJ函数
    描述BESSELJ函数返回贝塞尔函数Jn(x)。语法BESSELJ(X,N)争论Argument描述Required/OptionalXThevalueatwhichtoevaluatethefunction.RequiredNTheorderoftheBesselfunction.Ifnisnotaninteger,itistruncated.RequiredNotes如果x为非数值,......
  • 加拿大本科留学期间GPA太低不能毕业也不要放弃,可以跨本申硕
    加拿大本科留学期间GPA太低不能毕业也不要放弃,可以跨本申硕加拿大的学位和美国大致相同,学校都很看重学生GPA成绩,所以这也导致很多学生在本科念书期间会因为GPA的问题,面临不能毕业的窘境。不过现在,不能毕业的窘境也是可以突破的。在加拿大就读本科因为GPA太低不能毕业的学生,也不要放......
  • 京东方只有一个“王东升”,但需要更多“陈炎顺”
    文|新熔财经作者|谢逊20多年前,京东方手握30亿元的巨额资产,站在企业发展的十字路口踌躇。有人建议,买望京的地,进军房地产。如果真是这样干了,那么今天的京东方应该会是一个吃喝不愁、直接躺赢的“大房东”吧。然而,王东升拒绝了。他说,“我们是搞工业起家的,搞房地产我们也不懂。如果连我们......
  • 聚合类工具箱,吹爆这个软件
    日常工作和娱乐,都需要用到不同类型的软件,哪怕软件体积不大,也必须安装,否则到用时找不到就非常麻烦了。其实,很多软件不一定一样不剩地全部安装一遍,一方面原因是用的不多,另一方面多少有点占据内存。遇到类似的情况,小编推荐大家使用聚合类工具箱,软件体积不大,但功能多样,日用非常方便。最......
  • 十个最好的Java性能故障排除工具
    推荐十个最好的Java性能故障排除工具:  1.jconsole是随着JDK1.5而推出的。这是一个Java监测和管理控制台-JMX兼容的图形工具来监测Java虚拟机。它能够同时监测本地和远程的JVMs。详情可查看:jconsole工具介绍  2.VisualVM集成了几个现有的JDK软件工具,轻量级内存和CPU信息概......
  • Lucene3.0.2高亮显示报:java.lang.reflect.InvocationTargetException
    项目原导入包:lucene-core-3.0.2.jarlucene-highlighter-3.0.2.jar采用TermPositionVector位置方式进行高亮显示,主要代码如下:     TermPositionVectortermFreqVector=(TermPositionVector)reader.getTermFreqVector(id,fieldName);    TokenStreamtokenStream=Toke......
  • 善用java中的随机数
    Math.random()方法:产生0~1间的一个double随机值。(可直接用)还可以让random作为时间种子:在java.util.Random类下,有:Randomr=newRandom();r.nextInt(100);//生成0~99之间的随机整数还有,System类里有一个currentTimeMills()方法,返回一个从1970年1月1日0点0分0秒到目前的一个随......
  • 按钮触发table添加一行删除一行
    <!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN"><html> <head> <title>addHtml.html</title> <metahttp-equiv="keywords"content="keyword1,keyword2,keyword3"> <meta......
  • 深入研究java.lang.Runtime类
    在线API:http://download.oracle.com/javase/1.5.0/docs/api/java/lang/Runtime.html转自:http://lavasoft.blog.51cto.com/62575/15565一、概述     Runtime类封装了运行时的环境。每个Java应用程序都有一个Runtime类实例,使应用程序能够与其运行的环境相连接。     ......