python中log怎么用

在编写代码时,我们需要了解程序在运行过程中发生了什么事情,这时候就需要使用log 。log是程序输出的一种记录,可以记录程序运行过程中的事件和错误,方便程序员进行调试和排错 。Python中的logging模块提供了log相关的功能,本文将从多个角度进行分析 。
1. logging模块的基本使用

python中log怎么用

文章插图
logging模块是Python内置的模块,可以很方便地进行日志记录 。使用logging模块可以将日志记录到不同的地方,比如文件、终端等 。下面是一个简单的例子:
```
import logging
logging.basicConfig(filename='example.log', level=logging.DEBUG)
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模块 。然后使用basicConfig函数进行配置,指定将日志记录到文件example.log中,并设置记录的级别为DEBUG 。接着我们分别使用debug、info、warning、error和critical函数记录不同级别的日志 。
使用logging时需要注意,日志级别从低到高依次为:DEBUG、INFO、WARNING、ERROR、CRITICAL 。只有级别高于等于指定级别的日志才会被记录 。例如,上述代码中设置的级别为DEBUG,所以所有级别的日志都会被记录 。如果将级别设为WARNING,则只有WARNING、ERROR和CRITICAL级别的日志会被记录 。
2. 日志记录到文件和终端
在上面的例子中,我们将日志记录到了文件example.log中 。除了记录到文件,还可以将日志输出到终端 。下面是一个例子:
```
import logging
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)
fh = logging.FileHandler('example.log')
fh.setLevel(logging.DEBUG)
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
fh.setFormatter(formatter)
ch.setFormatter(formatter)
logger.addHandler(fh)
logger.addHandler(ch)
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对象,并设置了记录的级别为DEBUG 。然后创建了一个FileHandler对象和一个StreamHandler对象,分别将日志记录到文件和终端 。接着设置了日志的格式,将格式应用到FileHandler和StreamHandler对象中 。最后将FileHandler和StreamHandler对象添加到logger对象中 。
需要注意的是,如果只想记录到文件或终端,可以只创建一个FileHandler或StreamHandler对象即可 。
3. 使用不同的日志级别
在实际应用中,我们可能需要记录不同级别的日志 。下面是一个例子:
```
import logging
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)
fh = logging.FileHandler('example.log')
fh.setLevel(logging.DEBUG)
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
fh.setFormatter(formatter)
ch.setFormatter(formatter)
logger.addHandler(fh)
logger.addHandler(ch)
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')
try:
a = 1 / 0

推荐阅读