Python 日志操作
在软件开发中,日志是一项重要的功能。它可以帮助开发人员记录应用程序的运行情况、错误和异常信息,以便于调试和监控。Python 提供了强大的日志操作模块 logging,它可以让我们方便地在应用程序中添加日志功能。
logging 基本用法
要使用 logging 模块,首先需要导入:
import logging
然后,我们可以通过配置 logging 来确定日志输出的方式和级别。常见的日志级别包括 DEBUG
、INFO
、WARNING
、ERROR
和 CRITICAL
,级别逐渐提高,DEBUG
是最低级别,CRITICAL
是最高级别。默认情况下,日志级别为 WARNING
,即只会输出 WARNING
级别及以上的日志。
下面是一个简单的例子,展示了如何使用 logging 输出日志:
import logging
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s')
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')
运行上面的代码,输出结果如下:
2022-01-01 00:00:00,000 - DEBUG - This is a debug message
2022-01-01 00:00:00,000 - INFO - This is an info message
2022-01-01 00:00:00,000 - WARNING - This is a warning message
2022-01-01 00:00:00,000 - ERROR - This is an error message
2022-01-01 00:00:00,000 - CRITICAL - This is a critical message
日志输出到文件
除了输出到控制台,logging 还支持将日志输出到文件。我们可以通过指定 filename
参数来实现,如下所示:
import logging
logging.basicConfig(filename='app.log', level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s')
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')
运行上面的代码后,会生成一个名为 app.log
的日志文件,并将日志内容写入其中。
高级配置
除了上述基本用法,logging 模块还提供了丰富的配置选项来满足不同的需求。我们可以自定义日志输出格式、日志轮转(即按照一定的规则切分日志文件)、设置日志处理器等。
下面是一个更加复杂的示例,展示了如何使用 logging 模块的高级配置:
import logging
from logging.handlers import RotatingFileHandler
# 创建一个 logger 实例
logger = logging.getLogger('my_logger')
# 设置日志级别为 DEBUG
logger.setLevel(logging.DEBUG)
# 创建一个文件处理器,将日志写入 my_app.log 文件中,同时按照 10MB 的大小进行轮转
file_handler = RotatingFileHandler('my_app.log', maxBytes=10*1024*1024, backupCount=5)
# 创建一个控制台处理器,将日志输出到控制台
console_handler = logging.StreamHandler()
# 设置日志格式
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
file_handler.setFormatter(formatter)
console_handler.setFormatter(formatter)
# 将处理器添加到 logger 实例中
logger.addHandler(file_handler)
logger.addHandler(console_handler)
# 输出日志
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')
运行上面的代码,会将日志同时输出到控制台和 my_app.log
文件中。
类图
下面是 logging 模块的类图:
classDiagram
class logging.Logger
class logging.Handler
class logging.Formatter
class logging.Filter
class logging.StreamHandler
class logging.FileHandler
class logging.RotatingFileHandler
class logging.SocketHandler
class logging.SysLogHandler
class logging.NullHandler
logging.Logger "1" -- "0..*" logging.Handler
logging.Handler