python.logging教程
时间: 2023-11-16 21:59:47 浏览: 137
logging python
Python的logging模块允许你在你的应用程序中记录消息,以便在开发、测试和生产环境中进行故障排除。
下面是一个简单的入门教程来介绍如何在Python中使用logging模块。
## 基本用法
首先,导入logging模块。
```python
import logging
```
然后,你可以使用logging.basicConfig()函数来配置默认的日志记录器,例如:
```python
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s')
```
这将设置默认的日志记录级别为DEBUG,并将日志消息格式设置为时间戳、日志级别和消息文本。
现在,你可以使用logging模块中的函数来记录日志消息。例如:
```python
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')
```
当你运行此代码时,你将看到输出类似于以下内容的日志消息:
```
2019-02-26 13:23:45,678 - DEBUG - This is a debug message
2019-02-26 13:23:45,678 - INFO - This is an info message
2019-02-26 13:23:45,678 - WARNING - This is a warning message
2019-02-26 13:23:45,678 - ERROR - This is an error message
2019-02-26 13:23:45,678 - CRITICAL - This is a critical message
```
默认情况下,日志消息将发送到控制台。你也可以将其写入文件,例如:
```python
logging.basicConfig(filename='example.log', level=logging.DEBUG)
```
现在,所有日志消息都将写入example.log文件。
## 高级用法
logging模块还提供了其他一些功能,例如:
### 调试器
logging模块还提供了一个方便的调试器,可以帮助你识别和调试代码中的错误。例如:
```python
import logging
logging.basicConfig(level=logging.DEBUG)
def foo(x):
logging.debug('x = %s' % x)
return x * 2
def bar(y):
z = y + 3
return foo(z)
def main():
result = bar(5)
logging.debug('result = %s' % result)
if __name__ == '__main__':
main()
```
当你运行此代码时,你将看到输出类似于以下内容的日志消息:
```
DEBUG:root:x = 8
DEBUG:root:result = 16
```
这表明foo()函数接收到参数x=8,并返回结果x*2=16,而bar()函数接收到参数y=5,计算z=y+3=8,并将其传递给foo()函数。
### 记录器
logging模块还提供了Logger类,可以让你创建自定义的日志记录器。例如:
```python
import logging
# create logger
logger = logging.getLogger('my_logger')
logger.setLevel(logging.DEBUG)
# create console handler and set level to debug
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)
# create formatter
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
# add formatter to ch
ch.setFormatter(formatter)
# add ch to logger
logger.addHandler(ch)
# 'application' code
logger.debug('debug message')
logger.info('info message')
logger.warning('warn message')
logger.error('error message')
logger.critical('critical message')
```
这个例子创建了一个名为“my_logger”的自定义日志记录器,并将其配置为记录DEBUG级别的消息。它还创建了一个控制台处理程序,并将其添加到日志记录器中。最后,它使用Logger类中的函数来记录日志消息。
### 过滤器
logging模块还提供了Filter类,可以让你过滤特定类型的日志消息。例如:
```python
import logging
class MyFilter(logging.Filter):
def filter(self, record):
return record.levelno == logging.WARNING
# create logger
logger = logging.getLogger('my_logger')
logger.setLevel(logging.DEBUG)
# create console handler and set level to debug
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)
# create formatter
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
# add formatter to ch
ch.setFormatter(formatter)
# add ch to logger
logger.addHandler(ch)
# add filter to handler
ch.addFilter(MyFilter())
# 'application' code
logger.debug('debug message')
logger.info('info message')
logger.warning('warn message')
logger.error('error message')
logger.critical('critical message')
```
这个例子创建了一个名为“my_logger”的自定义日志记录器,并将其配置为记录DEBUG级别的消息。它还创建了一个控制台处理程序,并将其添加到日志记录器中。但是,它还使用自定义的MyFilter类来过滤只记录WARNING级别的消息。
当你运行此代码时,你将看到输出类似于以下内容的日志消息:
```
2019-02-26 13:23:45,678 - my_logger - WARNING - warn message
2019-02-26 13:23:45,678 - my_logger - ERROR - error message
2019-02-26 13:23:45,678 - my_logger - CRITICAL - critical message
```
这表明只有WARNING、ERROR和CRITICAL级别的消息被记录下来了,而DEBUG和INFO级别的消息被过滤掉了。
## 总结
这是一个简单的Python.logging教程,介绍了如何在Python中使用logging模块来记录日志消息。logging模块提供了许多功能,例如自定义日志记录器、过滤器和调试器,可以帮助你更好地理解和调试你的代码。
阅读全文