✨Logging模块简介
Python Logging模块是一个内置的日志处理工具,可以用于记录和输出应用程序的运行状态。该模块提供了一个灵活的方式来控制日志记录的输出和格式,包括记录日志的级别、日志信息的格式和输出位置等。
以下是Python Logging模块的基本概念:
- Logger:是日志记录器,用于记录日志信息,负责调用处理器(Handler)输出日志信息。
- Handler:是日志处理器,负责处理日志记录器传递的日志信息,可以将日志输出到控制台、文件、网络等位置。
- Formatter:是日志格式化器,用于定义日志输出的格式,包括时间、日志级别、消息内容等信息。
- Level:是日志级别,表示日志的重要程度。日志级别从低到高依次为:DEBUG、INFO、WARNING、ERROR、CRITICAL。
✨Logging日志级别
在 Python 的 logging 模块中,日志记录的优先级(或称为“级别”)是由以下常量定义的(按照从低到高的顺序):
DEBUG
: 最低级别的日志信息,通常只在调试程序时使用,记录详细的程序执行信息,便于排错。INFO
: 用于确认程序按预期运行的信息,记录程序运行过程中重要的事件和状态。WARNING
: 用于警告程序可能存在的问题,但程序仍能正常运行,记录非致命性的问题。ERROR
: 用于记录程序中的错误信息,指出程序出现错误的原因和位置,程序仍然能够继续运行。CRITICAL
: 最高级别的日志信息,表示程序出现了严重的错误,必须停止程序运行。
在使用 logging 模块时,通常可以通过设置 logger 对象的级别来控制记录的日志信息的级别。例如,设置 logger 的级别为 WARNING,则只有 WARNING、ERROR 和 CRITICAL 级别的日志信息会被记录。
✨简单使用示例
下面是一个简单的使用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')
上述代码会将日志记录在名为example.log
的文件中,并按照默认的日志格式输出日志信息。其中,basicConfig()
方法设置了日志文件的名称和日志级别。
当执行上述代码时,输出的日志信息如下所示:
DEBUG:root:This is a debug message
INFO:root:This is an info message
WARNING:root:This is a warning message
ERROR:root:This is an error message
CRITICAL:root:This is a critical message
从上面的输出可以看出,日志信息按照默认的格式输出,并且包括了日志级别、记录器名称和消息内容。
可以根据需要,使用Python Logging模块提供的其他方法和类来定制化日志输出的格式、级别和位置。
✨开启不同颜色日志输出
注意:默认情况下,Python的logging模块为所有的logger设置了一个默认的handler。调用logger.info()
方法时,该方法将使用默认handler来处理日志记录,而默认handler将日志记录发送到标准错误流(stderr)
要解决这个问题,我们需要移除默认的handler,并且仅使用我们定义的handler来处理日志记录。
import logging
from colorama import init, Fore, Style
def get_logger(level=logging.INFO):
# 初始化colorama
init(autoreset=True)
# 创建Logger对象
logger = logging.getLogger()
logger.setLevel(logging.NOTSET)
# 移除默认的handler
for handler in logger.handlers:
logger.removeHandler(handler)
# 定义一个输出到终端并使用颜色的Handler
class ColorHandler(logging.StreamHandler):
def __init__(self, stream=None, level=logging.NOTSET):
super().__init__(stream=stream)
self.level = level
def emit(self, record):
if record.levelno >= self.level:
if record.levelno >= logging.ERROR:
color = Fore.RED # 红色
elif record.levelno >= logging.WARNING:
color = Fore.YELLOW # 黄色
elif record.levelno >= logging.INFO:
color = Fore.GREEN # 绿色
else:
color = Style.RESET_ALL # 默认颜色
message = self.format(record)
message = color + message + Style.RESET_ALL # 恢复默认颜色
stream = self.stream
stream.write(message)
stream.write(self.terminator)
# 创建ColorHandler对象,并添加到Logger中
handler = ColorHandler(level=level)
logger.addHandler(handler)
return logger
如上代码封装了get_logger()
方法
使用时调用get_logger()
即可
logger = get_logger()
logger.info('项目已启动')
⭐转载请注明出处
本文作者:双份浓缩馥芮白
原文链接:https://www.cnblogs.com/Flat-White/p/17255337.html
版权所有,如需转载请注明出处。
标签:logger,logging,Python,handler,Logging,日志,级别,message From: https://www.cnblogs.com/Flat-White/p/17255337.html