写代码过程中,为了方便问题定位,经常需要打印信息,但是太多的print()不好,所以可以用到logger
Logger通常分为两类:
一类是StreamHandler,将日志信息输出到控制台;另一类是FileHandler,将日志信息输出到文件。
Python标准库中的logging模块提供了强大的Logger功能。
import logging class Logger: def __init__(self, file_log): self.file_log = file_log # 给Logger添加Handler。创建日志记录器。获取名为may_logger的Logger对象 self.logger = logging.getLogger("may_logger") def logger_may(self): # 配置Logger logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s') # 因为系统默认输出到控制台,所以有关StreamHandler日志处理器的给注释掉,要不然会重复输出 # 创建一个StreamHandler日志处理器,输出到控制台 # console_handler = logging.StreamHandler() # console_handler.setLevel(logging.DEBUG) # 创建一个FileHandler日志处理器,输出到文件 # filelog = 'example.log' file_handler = logging.FileHandler(self.file_log) file_handler.setLevel(logging.DEBUG) # 定义Handler的输出格式 formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s') # console_handler.setFormatter(formatter) # 输出格式运用到控制台日志处理器 file_handler.setFormatter(formatter) # 输出格式运用到文件日志处理器 # 将处理器添加到记录器中 # logger.addHandler(console_handler) self.logger.addHandler(file_handler) return self.logger # 自定义清理函数,用于清空文件中旧的日志数据 def clear_log_data(self): with open(self.file_log, 'w') as f: f.truncate()
运用如下:
from testcode import logUtil file_log = 'example.log' logger = logUtil.Logger(file_log).logger_may() logUtil.Logger(file_log).clear_log_data() # 清空旧的文件数据 # 使用Logger记录信息 logger.debug('这是一条debug级别的日志,即调试信息') logger.info('这是一条info级别的日志,即普通日志') logger.warning('这是一条warning级别的日志') logger.error('这是一条error级别的日志') logger.critical('这是一条critical级别的日志')
运行结果:
在同一目录下,会生成 .log 文件
注意事项:
- 在使用Logger时,建议设置合适的日志级别,如DEBUG、INFO、WARNING、ERROR和CRITICAL。这样可以控制输出的日志信息量,避免过多的日志干扰程序运行。
- Logger可以同时添加多个Handler,以便将日志输出到不同的地方,如控制台、文件等。
- Logger的格式化字符串可以自定义,以满足不同的输出需求。在上面的示例中,我们使用了时间戳、日志级别和日志信息作为格式化字符串的内容。
如果要过滤指定的信息:
# 创建一个日志过滤器,只记录包含关键词"error"的日志消息 class ErrorFilter(logging.Filter): def filter(self, record): return 'error' in record.getMessage() error_filter = ErrorFilter() # 将过滤器添加到处理器中 console_handler.addFilter(error_filter)
标签:logging,log,python,file,logger,Logger,日志 From: https://www.cnblogs.com/may18/p/17746582.html