Python logging日志模块 配置文件方式

下面是关于Python logging日志模块配置文件方式的完整攻略:

1. logging模块简介

Python中的logging模块提供了一个灵活而高度可定制化的日志系统,可以记录代码运行时的详细信息,方便开发人员进行调试。logging模块支持不同的日志级别,可以随时更改日志级别,还可以同时向多个输出目标记录日志信息。

logging模块提供了两种使用方式:基本配置方式和配置文件方式。基本配置方式通常用于快速设置简单的日志系统,而配置文件方式则更加灵活,适用于需要更好的定制化和管理的场景。

2. 配置文件方式介绍

logging模块的配置文件是一个包含了Python代码和配置信息的文本文件,通过读取该文件来配置logging模块。配置文件中可以设置logging模块的各种参数,如日志输出目标、日志级别、输出格式等。

通常情况下,我们会将logging配置文件命名为logging.conf或logging.ini,文件格式为ini格式或者是配置文件格式。

下面是一个典型的logging配置文件:

[loggers]
keys=root,sampleLogger

[handlers]
keys=fileHandler,consoleHandler

[formatters]
keys=simpleFormatter,complexFormatter

[logger_root]
level=DEBUG
handlers=fileHandler,consoleHandler

[logger_sampleLogger]
level=DEBUG
handlers=fileHandler
qualname=sampleLogger
propagate=0

[handler_fileHandler]
class=FileHandler
level=DEBUG
formatter=complexFormatter
args=('myapp.log', 'a')

[handler_consoleHandler]
class=StreamHandler
level=DEBUG
formatter=simpleFormatter
args=(sys.stdout,)

[formatter_simpleFormatter]
format=%(asctime)s - %(name)s - %(levelname)s - %(message)s
datefmt=%Y-%m-%d %H:%M:%S

[formatter_complexFormatter]
format=%(asctime)s - %(name)s - %(levelname)s - %(module)s : %(lineno)d - %(message)s
datefmt=%Y-%m-%d %H:%M:%S

3. 配置文件详解

上述配置文件包含了4个部分:loggers、handlers、formatters和root。

3.1 loggers

loggers部分用来定义日志器(logger),也就是我们对应使用logging.getLogger()函数的参数。其中需要包含一个keys元素,指定loggers子部分的key列表。

3.2 handlers

handlers部分用来定义日志处理器(handler),也就是我们对应使用logging.addHandler()函数的参数。其中需要包含一个keys元素,指定handlers子部分的key列表。

3.3 formatters

formatters部分用来定义日志格式化器(formatter),也就是我们对应使用logging.Formatter()函数的参数。其中需要包含一个keys元素,指定formatters子部分的key列表。

3.4 root

root部分用来配置根记录器(root logger)的各种选项,根据需要包含level、handlers项。此外,我们也可以对特定的子记录器进行定制化配置。

4. 示例说明

下面给出两个示例来说明如何使用logging配置文件方式。

4.1 示例代码

import logging
import logging.config

logging.config.fileConfig("logging.conf")
logger = logging.getLogger("sampleLogger")

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.config.fileConfig()函数读取logging配置文件logging.conf,并通过logging.getLogger()函数获取名称为sampleLogger的日志器,在不同的日志级别下输出不同级别的日志信息。

4.2 示例配置文件

[loggers]
keys=root,sampleLogger

[handlers]
keys=fileHandler,consoleHandler

[formatters]
keys=simpleFormatter,complexFormatter

[logger_root]
level=DEBUG
handlers=fileHandler,consoleHandler

[logger_sampleLogger]
level=DEBUG
handlers=fileHandler
qualname=sampleLogger
propagate=0

[handler_fileHandler]
class=FileHandler
level=DEBUG
formatter=complexFormatter
args=('myapp.log', 'a')

[handler_consoleHandler]
class=StreamHandler
level=DEBUG
formatter=simpleFormatter
args=(sys.stdout,)

[formatter_simpleFormatter]
format=%(asctime)s - %(name)s - %(levelname)s - %(message)s
datefmt=%Y-%m-%d %H:%M:%S

[formatter_complexFormatter]
format=%(asctime)s - %(name)s - %(levelname)s - %(module)s : %(lineno)d - %(message)s
datefmt=%Y-%m-%d %H:%M:%S

上述配置文件分别定义了:

  • 两个日志器,一个是根日志器,一个是名称为sampleLogger的子日志器
  • 两个处理器,一个是将日志输出到文件中的FileHandler,一个是将日志输出到控制台的StreamHandler
  • 两种格式化器,一种是简单格式化器,只包含日志级别和日志信息,一种是复杂格式化器,包含了模块名称和行号等更为详细的信息。

其中,名为sampleLogger的日志器的配置项如下:

  • level:默认为NOTSET,最低为DEBUG,最高为CRITICAL
  • handlers:默认为[]
  • qualname:全称名称,即当我们使用logging.getLogger("sampleLogger.subLogger")时,注意到sampleLogger是存在的logger,subLogger是当前不存在的logger时其使用
  • propagate:默认为1,即往上传递。如sampleLogger不是根Logger,那么会将sampleLogger日志内容传递给其父Logger,根Logger的结果就随你怎么设置了;如果设置为0,则表示不向上传递。

5. 结语

以上就是关于Python logging日志模块配置文件方式的详细介绍和示例演示,希望能对你的学习和工作有所帮助。如果您需要更加详细和专业的教程,请参考logging模块的官方文档。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python logging日志模块 配置文件方式 - Python技术站

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

相关文章

  • latexmax正下标范围

    LaTeXMax 正下标范围攻略 LaTeXMax 是一款基于 LaTeX 的数学公式编辑器,它提供了丰富的数学符号和公式模板,可以帮助用户快速创建复杂的数学公式。在本攻略中我们将介绍如何使用 LaTeXMax 编辑正下标范围,并提供两个示例说明。 正下标范围 正下标范围是一种常用的数学符号,用于表示一组数的下标范围。在 LaTeXMax 中,我们可以使用 …

    other 2023年5月6日
    00
  • Discuz和jQuery变量名冲突的3种解决方法

    解决Discuz和jQuery变量名冲突的3种方法 在使用Discuz和jQuery的同时,可能会遇到变量名冲突的问题。这是因为Discuz和jQuery都使用了一些常见的变量名,例如$和jQuery。为了解决这个问题,我们可以采取以下三种方法。 方法一:使用jQuery.noConflict() jQuery.noConflict()是一个jQuery提供…

    other 2023年8月8日
    00
  • docker在debianjessie上构建时 “无法找到必需的软件包构建”

    以下是关于“docker在debian jessie上构建时‘无法找到必需的软件包构建’”的完整攻略,过中包含两个示例。 背景 在使用docker构建镜像时,有时会现“无法找到必需的软件包建”的错误。本攻略将介绍如何在debian jess上使用docker构建镜像时解决此问题。 基本原理 在debian jessie上使用docker构建镜像时,可能会出现…

    other 2023年5月9日
    00
  • php日期格式化方法详解

    PHP日期格式化方法详解 在开发中,我们常常需要对日期进行格式化,比如要将日期转成字符串,或者将字符串转成日期对象。PHP 提供了丰富的日期格式化方法,本文将对常用的格式化方法进行详细讲解。 将日期时间格式化为字符串 使用 PHP 内置的 date 函数可以将日期时间格式化为字符串。该函数的第一个参数为格式化字符串,用于指定输出的格式。 下面是一些常用的格式…

    其他 2023年3月28日
    00
  • javascript高级程序设计5.pdf

    以下是关于《JavaScript高级程序设计(第5版)》PDF电子书的完整攻略: 什么是《JavaScript高级程序设计(第5版)》PDF电子书 《JavaScript高级程序设计(第5版)》PDF电子书是一本介绍JavaScript语言高级特性和应用的经典教材的电子版,由Nicholas C. Zakas编写。该电子书内容涵盖了JavaScript语言的…

    other 2023年5月7日
    00
  • Java编程关于子类重写父类方法问题的理解

    Java编程中的继承是一个强大的特性,可以通过子类继承父类的属性和方法,同时也可以在子类中重写父类的方法。但是,如果不正确地理解子类重写父类方法,可能会导致一些难以排查的错误。在本文中,我们将详细讲解如何正确地理解子类重写父类方法问题。 1. 概述 在Java中,子类可以重写父类的方法。这意味着,子类可以提供自己的实现,以替代从父类继承的实现。当我们调用一个…

    other 2023年6月26日
    00
  • 键盘没有home键和end键的完美解决办法

    当键盘没有Home键和End键时,我们可以使用以下两种方法来解决这个问题: 方法一:使用组合键 在大多数情况下您可以使用组合键来模拟Home键和End键的功能。以下是一些常用的组合键: 按下Ctrl”和“左箭”键,将光标移动到行首,模拟Home键的功能。 按下“Ctrl”和“右箭头”键将光标移动到行尾,模拟End键的功能。 按下“Shift”和“Ctrl”和…

    other 2023年5月7日
    00
  • python获取当前所在目录的方法详解

    当我们在编写Python程序时,有时需要获取当前所在目录的路径。Python提供了多种方法来获取当前所在目录,下面是获取当前所在目录的两种常用: 方法1:使用os模块 在Python中,可以使用os模块来获取当前所在目录。具体步骤如下: import os current_dir = os.getcwd() print(current_dir) 在上面的示例…

    other 2023年5月8日
    00
合作推广
合作推广
分享本页
返回顶部