type
status
date
Sep 19, 2023 08:33 AM
slug
summary
tags
category
icon
password
logging.config.fileConfig 配置文件格式配置文件各部分解释如上配置中, 如何配置多个 handle配置解释可以增加 filter 吗root,sampleLogger 这两个 logging 有什么区别示例上述配置文件中, logger 中的 level 和 handler 的 level 是什么关系逻辑关系:示例:
logging.config.fileConfig 配置文件格式
ChatGPT
ChatGPT
在Python的
logging
模块中,logging.config.fileConfig
函数用于从配置文件中读取日志配置。该配置文件通常采用INI文件格式,分为几个主要的部分。- [loggers]: 列出需要配置的logger名称。
- [handlers]: 列出需要配置的handler名称。
- [formatters]: 列出需要配置的formatter名称。
- [logger_名称]: 针对每个特定的logger进行的配置。
- [handler_名称]: 针对每个特定的handler进行的配置。
- [formatter_名称]: 针对每个特定的formatter进行的配置。
以下是一个简单的示例:
配置文件各部分解释
- [loggers], [handlers], [formatters]: 列出所有需要配置的logger、handler和formatter的名称。
- [logger_名称], [handler_名称], [formatter_名称]: 针对每一个特定的logger、handler或formatter进行的详细配置。
level
: 日志级别。handlers
: 关联的handler。qualname
: logger的全名(用于区分不同的logger)。propagate
: 是否传播消息给父logger。
- [handler_名称]
class
: handler的类名。level
: 日志级别。formatter
: 使用的formatter。args
: 传递给handler类初始化方法的参数。
注意,这里的
StreamHandler
、DEBUG
等都是Python logging
模块内置的类和常量。你可以根据需要更改它们。一旦你创建了这个配置文件,你就可以在Python代码中使用
logging.config.fileConfig()
方法来加载它:这样,日志系统就会按照
logging.ini
文件中的配置来执行。这对于需要可配置和灵活的日志处理非常有用。S
You
如上配置中, 如何配置多个 handle
ChatGPT
ChatGPT
在
logging.config.fileConfig
的INI格式配置文件中,配置多个handler主要涉及以下几个步骤:- 在
[handlers]
段落中列出所有你想要配置的handler的键(key)。
- 为每一个handler创建一个单独的
[handler_名称]
段落,并进行具体配置。
- 在
[logger_名称]
段落中,通过设置handlers
字段为一个由逗号分隔的handler键列表,指定该logger应该使用哪些handler。
以下是一个配置了多个handler(一个
StreamHandler
和一个FileHandler
)的示例:配置解释
- 在
[handlers]
段落中,我添加了两个handler键:consoleHandler
和fileHandler
。
- 创建了两个独立的handler配置段落:
[handler_consoleHandler]
和[handler_fileHandler]
,并对它们进行了具体的配置。
- 在
[logger_root]
和[logger_sampleLogger]
段落中,我设置了handlers
字段为consoleHandler,fileHandler
,这意味着这些logger将使用这两个handler来处理日志。
这样,日志既会输出到控制台(通过
StreamHandler
),也会写入到一个名为logfile.log
的文件中(通过FileHandler
)。这两个handler都会使用相同的formatter(sampleFormatter
)来格式化日志记录。你只需将这个配置保存为一个INI文件(例如
logging.ini
),然后在你的Python代码中使用logging.config.fileConfig
来加载这个配置文件。这样,你就可以利用多个handler来更灵活地处理日志了。S
You
可以增加 filter 吗
ChatGPT
ChatGPT
当然,你可以在
logging.config.fileConfig
的INI格式配置文件中添加日志过滤器(Filter)。但需要注意的是,Python标准库中的logging.config.fileConfig
函数对于过滤器的支持相对有限。你可以通过代码来添加过滤器,但在INI配置文件中直接配置过滤器是比较受限的。以下是一个示例,展示了如何在代码中为通过
fileConfig
配置的logger添加一个简单的过滤器:- 配置文件(logging.ini):
- Python 代码:
在这个示例中,我定义了一个名为
MyFilter
的自定义过滤器类。这个过滤器仅通过包含“keyword”的日志记录。然后,我使用
logging.config.fileConfig
加载了INI格式的配置文件,并获取了一个名为sampleLogger
的logger对象。接着,我创建了
MyFilter
的一个实例,并使用addFilter
方法将其添加到sampleLogger
中。这样,即使我们使用的是通过
fileConfig
加载的配置,也能成功地为logger添加了一个自定义过滤器。这个过滤器将只允许包含“keyword”的日志消息通过。S
You
root,sampleLogger 这两个 logging 有什么区别
ChatGPT
ChatGPT
在Python的
logging
库中,root
logger和名为sampleLogger
(或其他任何自定义名称)的logger有以下几个主要区别:- 层次结构:
root
logger是所有logger对象的父级。其他所有的logger(例如sampleLogger
)都是root
logger的后代。这个层次结构允许日志消息在logger之间传播。
- 默认行为:如果一个自定义logger(例如
sampleLogger
)没有被配置或没有关联的handler,那么其日志消息会传播到root
logger。root
logger默认有一个StreamHandler
用于输出日志到控制台。
- 配置:
root
logger和sampleLogger
可以独立配置。你可以为它们指定不同的日志级别、handler、formatter等。
- 名称空间:自定义logger通常用于标识或隔离应用程序的不同部分。例如,你可能会使用一个名为
database
的logger来处理与数据库相关的日志,而使用一个名为network
的logger来处理与网络相关的日志。
- 消息传播:你可以通过设置
propagate
属性来控制日志消息是否从子logger(如sampleLogger
)传播到其上级(例如root
logger)。默认情况下,propagate
设置为True
。
- 多样性与灵活性:自定义logger(如
sampleLogger
)提供了更多灵活性,因为你可以根据不同的应用程序组件或模块为它们定义不同的行为。
示例
在一个配置文件中:
root
logger仅处理ERROR
级别或以上的日志,并通过consoleHandler
输出到控制台。
sampleLogger
处理DEBUG
级别或以上的日志,并通过fileHandler
输出到一个文件。
这样,通过使用
root
和自定义的logger,你可以更细致地控制哪些日志消息被处理和如何被处理。S
You
上述配置文件中, logger 中的 level 和 handler 的 level 是什么关系
ChatGPT
ChatGPT
在Python的
logging
配置中,logger
和handler
都有一个level
设置,但它们起作用的阶段和逻辑有所不同:- Logger Level:当一个日志消息到达某个
logger
时,首先会检查这个消息的级别是否大于或等于logger
自己的级别。如果是,消息会被处理并传递给该logger
关联的所有handler
;否则,该消息会被忽略。
- Handler Level:即使消息通过了
logger
的级别检查,它还需要通过与之关联的每个handler
的级别检查。handler
级别用于进一步过滤消息。只有当消息级别大于或等于handler
的级别时,该handler
才会处理该消息。
逻辑关系:
- 第一关卡:Logger Level
如果消息级别 ≥ Logger级别,则进入下一关;否则,消息被丢弃。
- 第二关卡:Handler Level
对于通过第一关卡的消息,还需检查与各个
handler
相关的级别。如果消息级别 ≥ Handler级别,则由该handler
进行处理。示例:
假设配置文件中有以下设置:
- 当一个
INFO
级别的消息到达sampleLogger
时,它会被丢弃,因为INFO
<WARNING
(Logger级别)。
- 当一个
WARNING
级别的消息到达sampleLogger
时,它会通过Logger级别的检查,但只会被fileHandler
处理,因为WARNING
<ERROR
(consoleHandler
的级别)但WARNING
≥DEBUG
(fileHandler
的级别)。
通过这种方式,
logger
和handler
的level
设置提供了两级过滤机制,使得日志系统更加灵活和高效。