# Python--logging模块不同级别写入到不同文件
## 1. 概述
Python中的logging模块可以帮助我们记录程序运行时的各种信息,包括debug信息、提示信息、错误信息等。通常将这些信息写入一个文件中,以供后续分析和排查问题。
logging模块的配置非常灵活,我们可以自定义各种输出方式和格式。本文主要介绍如何将不同级别的日志信息写入到不同的文件中进行存储。
## 2. logging模块使用
Python中的logging模块提供了非常丰富的配置选项,我们可以根据实际需要进行自定义。下面是一个基本的logging配置示例:
```
import logging
logging.basicConfig(
level=logging.DEBUG,
format='%(asctime)s %(levelname)s %(message)s',
handlers=[logging.FileHandler('debug.log'),
logging.StreamHandler()])
```
这里我们使用basicConfig()函数进行简单的配置,指定了日志的输出级别为DEBUG,使用了默认的日志格式(包括当前时间、日志级别和日志内容),并将日志输出到文件debug.log和控制台上。
之后我们就可以通过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')
```
## 3. 不同级别写入到不同文件
接下来,我们介绍如何将不同级别的日志信息写入到不同的文件中进行存储。这在实际开发中非常有用,可以方便我们根据日志级别快速定位问题所在。
我们可以使用logging模块的Logger类来自定义不同的日志处理器,例如:
```
import logging
logger = logging.getLogger(__name__)
debug_handler = logging.FileHandler('debug.log')
debug_handler.setLevel(logging.DEBUG)
info_handler = logging.FileHandler('info.log')
info_handler.setLevel(logging.INFO)
warning_handler = logging.FileHandler('warning.log')
warning_handler.setLevel(logging.WARNING)
# 设置日志格式
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
# 将格式应用到所有日志处理器
debug_handler.setFormatter(formatter)
info_handler.setFormatter(formatter)
warning_handler.setFormatter(formatter)
# 将不同级别的日志添加到不同的日志处理器中
logger.addHandler(debug_handler)
logger.addHandler(info_handler)
logger.addHandler(warning_handler)
```
这里我们使用Logger类创建了一个名为`__name__`的logger对象,并分别为不同的日志级别设置了不同的日志处理器(即输出文件)。配置完成后,我们就可以通过不同的日志级别来记录日志,例如:
```
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')
```
此时,不同级别的日志信息将被分别写入到debug.log、info.log和warning.log中。
## 4. 参考文献
- [Python官方文档: logging模块](https://docs.python.org/3/library/logging.html)