Python中logger日志模块详解

yizhihongxing

Python中logger日志模块详解

1. 为什么需要日志模块?

在编写代码时,有时候需要打印一些调试信息或者输出一些运行结果,以便于程序员进行调试和定位错误。在小规模的项目中,可以直接使用print函数进行输出。但是,在大规模的项目中,使用print容易造成输出信息泛滥,难以定位问题。此时,就需要使用专业的日志模块来管理输出信息。

Python标准库内置了logging模块,通过logging可以实现记录程序运行过程中的信息并提供多种输出方式,如:输出到终端、输出到文件等。

2. 如何使用日志模块?

2.1 logging模块的基本使用

使用logging模块前需要先导入该模块:

import logging

接下来,我们可以使用logging模块的一些函数来记录日志信息,如下所示:

# 输出到控制台
logging.debug('This is a debug message')
logging.info('This is an info message')
logging.warning('This is a warning message')
logging.error('This is an error message')
logging.critical('This is a critical message')

在使用logging模块输出日志信息时,是按照严重程度依次递增的,从低到高一共分为5个等级:DEBUG、INFO、WARNING、ERROR、CRITICAL。其中,DEBUG级别的信息最为详细,而CRITICAL级别的信息最为严重。

2.2 配置logging模块

通过上面的示例,我们可以很轻松地使用logging模块输出日志信息到终端。但是,在实际应用中,为提高代码的可维护性和重用性,我们通常需要通过logging模块的配置功能,来将不同的日志输出到不同的位置,或者根据不同的需求输出不同级别的信息。下面,我们将介绍一些常用的logging模块配置:

2.2.1 设置日志级别

通过logging模块的basicConfig函数,可以设置日志级别,从而限制输出的信息等级:

import logging

# 设置日志级别
logging.basicConfig(level=logging.DEBUG)

上述代码将设置日志级别为DEBUG,这意味着所有大于等于该级别的信息都将被输出。

如果想设置为输出所有日志信息,则可以使用如下代码:

# 输出所有日志信息
logging.basicConfig(level=logging.NOTSET)

2.2.2 指定输出格式

通过logging模块的basicConfig函数,还可以设置输出日志的格式和内容,常用的占位符如下所示:

占位符 描述
%(name)s 日志名称
%(levelname)s 日志级别
%(asctime)s 日志创建时间
%(message)s 日志信息
%(filename)s 日志文件名
%(funcName)s 日志记录函数名
%(lineno)d 日志记录行号
%(pathname)s Python文件的完整路径,包括文件名
%(thread)d 线程ID

示例代码如下:

import logging

logging.basicConfig(format='%(asctime)s - %(levelname)s - %(name)s - %(message)s', level=logging.INFO)

logger = logging.getLogger(__name__)

logger.info('This is an info message')

上述代码中,我们将日志输出格式设置为:

2018-08-27 15:06:12,058 - INFO - __main__ - This is an info message

2.2.3 将日志输出到文件

通过设置输出日志的filename参数,可以将日志输出到文件中,示例代码如下:

import logging

logging.basicConfig(filename='example.log', format='%(asctime)s - %(levelname)s - %(name)s - %(message)s', level=logging.INFO)

logger = logging.getLogger(__name__)

logger.info('This is an info message')

上述代码将日志输出到了example.log文件中。

2.3 logging模块的高级使用

上述介绍了logging模块的基本使用和常用配置,接下来我们将介绍logging模块的高级用法,包括使用日志处理器和日志过滤器。

2.3.1 使用日志处理器

日志处理器用于指定日志输出的位置,logging模块内置的日志处理器有:StreamHandler、FileHandler、RotatingFileHandler以及SocketHandler等。

# 输出到控制台
stream_handler = logging.StreamHandler()
stream_handler.setLevel(logging.DEBUG)
stream_formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(name)s - %(message)s')
stream_handler.setFormatter(stream_formatter)

# 输出到文件
file_handler = logging.FileHandler('example.log')
file_handler.setLevel(logging.ERROR)
file_formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(name)s - %(message)s')
file_handler.setFormatter(file_formatter)

logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)

logger.addHandler(stream_handler)
logger.addHandler(file_handler)

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')

上述代码将日志输出到了控制台和example.log两个位置,并使用不同的日志处理器设置了不同的输出级别和输出格式。

2.3.2 使用日志过滤器

日志过滤器用于根据指定的条件过滤需要进行日志输出的消息,logging模块内置的日志过滤器有:Filter、LogRecord属性过滤器以及其他各种类型的过滤器。

# 筛选出日志消息中包含error关键字的消息
class ErrorFilter(logging.Filter):
    def filter(self, record):
        return record.levelno == logging.ERROR and 'error' in record.msg

logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)

stream_handler = logging.StreamHandler()
stream_handler.setLevel(logging.DEBUG)
stream_formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(name)s - %(message)s')
stream_handler.setFormatter(stream_formatter)
stream_handler.addFilter(ErrorFilter())

file_handler = logging.FileHandler('example.log')
file_handler.setLevel(logging.ERROR)
file_formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(name)s - %(message)s')
file_handler.setFormatter(file_formatter)

logger.addHandler(stream_handler)
logger.addHandler(file_handler)

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.error('This is another error.')

上述代码将只输出包含error关键字的日志消息。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python中logger日志模块详解 - Python技术站

(0)
上一篇 2023年6月3日
下一篇 2023年6月3日

相关文章

  • python使用dabl几行代码实现数据处理分析及ML自动化

    Python使用dabl几行代码实现数据处理分析及ML自动化 dabl(Data Analysis Baseline Library)是一个基于Scikit-Learn的Python库,它提供了一系列自动的数据处理、分析和机器学习工具,可以帮助用户快速地进行数据探索和建模。dabl库的主要特点括: 自动化的数据预处理和特征工程。 自动化的数据可视化和探索性分…

    python 2023年5月14日
    00
  • Python 并行化执行详细解析

    Python 并行化执行详细解析 在本文中,我们将深入探讨如何使用 Python 实现并行化执行的方法。本文将涵盖以下主题: 什么是并行化执行 如何在 Python 中使用并行化执行 使用 threading 模块 使用 multiprocessing 模块 并行化执行的优缺点 示例说明 1. 什么是并行化执行 并行化执行是指在一个系统中同时执行多个任务,以…

    python 2023年6月3日
    00
  • pip报错“ValueError: invalid literal for int() with base 10: ‘3.6’”怎么处理?

    当使用 pip 安装 Python 包时,可能会遇到 “ValueError: invalid literal for int() with base 10: ‘3.6’” 错误。这个错误通常是由于 Python 版本号格式不正确导致的。以下是详细讲解 pip 报错 “ValueError: invalid literal for int() with ba…

    python 2023年5月4日
    00
  • Python 错误和异常代码详解

    下面为您详细讲解“Python 错误和异常代码详解”的攻略。 一、Python错误和异常介绍 在编写程序时,经常会遇到错误和异常。遇到错误时程序会停止执行,而异常则是一种可以被处理的错误。Python中内置了许多异常类型,同时我们也可以通过 raise 语句自定义异常。 1.1 异常类型 Python内置的异常类型有很多,比如: IOError(文件读写错误…

    python 2023年5月13日
    00
  • vs code 配置python虚拟环境的方法

    下面是详细讲解“vs code 配置python虚拟环境的方法”的完整攻略。 什么是Python虚拟环境 Python虚拟环境是指在一个系统中运行的独立Python环境,其各自的环境变量、依赖包、Python解释器、工具等都是独立的。为什么要使用Python虚拟环境?我们知道在Python应用程序开发中,开发环境与生产环境的配置可能会不同,部署环境与测试环境…

    python 2023年5月19日
    00
  • python中print格式化输出的问题

    当我们在Python中使用print()函数输出结果时,经常需要进行格式化输出,让输出的内容更直观,易于理解。本篇攻略将详细讲解有关Python中print格式化输出的问题。 基本格式化方式 Python中使用字符串格式化语法来格式化print()函数的输出信息。格式化语法使用%字符作为标记,后面跟着一个或多个格式化字符,用来控制输出信息的样式。 例如,我们…

    python 2023年6月5日
    00
  • 用python计算文件的MD5值

    下面是攻略: 1. MD5算法简介 MD5是一种将任意长度的消息压缩到一个128位哈希值的算法。由于该算法不可逆,因此它可以用于数据完整性校验、数字签名等领域。在Python中,我们可以用hashlib模块来计算文件的MD5值。 2. 计算文件的MD5值 2.1 打开文件并计算MD5 第一步是打开文件,可以使用Python的open()函数。接下来,我们需要…

    python 2023年6月2日
    00
  • Python“with”语句在 Visual Studio 中导致错误

    【问题标题】:Python “with” statement causes error in Visual StudioPython“with”语句在 Visual Studio 中导致错误 【发布时间】:2023-04-01 20:24:02 【问题描述】: 我将 Python (3.9) 与 Microsoft Visual Studio Communi…

    Python开发 2023年4月8日
    00
合作推广
合作推广
分享本页
返回顶部