使用logging和colorlog实现日志记录可以方便地记录程序的运行情况,方便调试和分析问题。下面将详细说明如何使用logging和colorlog,并提供相应的代码示例。
1. 安装colorlog模块
首先需要安装colorlog模块。可以通过pip命令进行安装:
pip install colorlog
2. logging模块介绍
logging模块是Python自带的日志记录模块。logging模块提供了非常灵活的日志记录方式,可以根据不同场景需求灵活配置,同时还支持多线程处理、远程日志收集等高级功能。
logging模块中有五个主要的类:
- Loggers:提供应用程序可直接使用的接口。
- Handlers:用于将日志记录发送到适当的目的地。例如文件、终端和网络等。
- Filters:提供细粒度的日志过滤功能,可以基于任何的日志属性(例如日志级别、时间等)进行过滤。
- Formatters:用于控制日志信息的输出格式。
- Levels:提供日志的严重程度级别。
下面分别说明这些类及其方法和属性。
Loggers类
Loggers类是提供应用程序可直接使用的接口。通常我们在应用程序中通过logging.getLogger()方法获取一个logger对象,然后使用这个logger对象进行日志记录。
Loggers类的主要方法:
- getLogger(name=None):获取一个logger对象,name为logger的名称,如果不传递name则使用root logger。
- setLevel(level):设置logger对象的日志级别,只有高于等于这个级别的日志才会被输出。例如设置为logging.DEBUG,则logging.debug、logging.info、logging.warning、logging.error、logging.critical这五个级别的日志都会被输出。
- addHandler(hdlr):向logger对象中添加一个handler,用于将日志输出到指定位置。
- removeHandler(hdlr):从logger对象中删除指定的handler。
- addFilter(filter):向logger对象中添加一个filter,用于对日志进行过滤。
- removeFilter(filter):从logger对象中删除指定的filter。
- debug(msg, *args, **kwargs):记录一条debug级别的日志。
- info(msg, *args, **kwargs):记录一条info级别的日志。
- warning(msg, *args, **kwargs):记录一条warning级别的日志。
- error(msg, *args, **kwargs):记录一条error级别的日志。
- critical(msg, *args, **kwargs):记录一条critical级别的日志。
- log(level, msg, *args, **kwargs):记录指定级别的日志。
- isEnabledFor(level):判断是否启用了指定级别的日志记录。
Loggers类的主要属性:
- level:logger对象的日志级别。
- handlers:logger对象中添加的handler列表。
- filters:logger对象中添加的filter列表。
Handlers类
Handlers类用于将日志记录发送到适当的目的地。例如文件、终端和网络等。常用的handler有:
- StreamHandler:将日志记录输出到终端。
- FileHandler:将日志记录输出到文件。
- RotatingFileHandler:将日志记录输出到滚动文件中。
- SMTPHandler:将日志记录通过邮件发送出去。
Handlers类的主要方法:
- setFormatter(fmt):设置handler对象的输出格式。
- setLevel(level):设置handler对象的日志级别。
- emit(record):将日志记录发送到handler指定的地方。
- flush():清空handler内部缓存的日志记录。
Handlers类的主要属性:
- formatter:handler对象的输出格式。
- level:handler对象的日志级别。
Filters类
Filters类提供了细粒度的日志过滤功能,可以基于任何的日志属性(例如日志级别、时间等)进行过滤。
Filters类的主要方法:
- filter(record):判断是否要处理指定的日志记录。
Formatters类
Formatters类用于控制日志信息的输出格式。常用的格式化符号有:
- %(name)s:logger的名称。
- %(levelno)s:日志级别的数字表示,如10、20、30、40、50。
- %(levelname)s:日志级别的字符串表示,如DEBUG、INFO、WARNING、ERROR、CRITICAL。
- %(pathname)s:调用日志记录函数所在的文件的完整路径名,例如/usr/local/www/python/debug.py。
- %(filename)s:调用日志记录函数所在的文件名,例如debug.py。
- %(funcName)s:调用日志记录函数的函数名,例如main。
- %(lineno)d:调用日志记录函数所在的行号,例如33。
- %(asctime)s:日志记录时间的字符串表示,例如“2019-01-01 12:00:00,000”。
- %(thread)d:线程ID。
- %(message)s:日志记录的信息。
Formatters类的主要方法:
- format(record):将日志记录转换为要输出的格式化字符串。
3. colorlog模块介绍
colorlog是一个支持颜色输出的Python日志模块。colorlog是基于logging模块的,可以方便地与logging模块一起使用。colorlog可以按照不同的日志级别为不同的级别设置不同的颜色,方便快速定位问题。
colorlog主要有如下特点:
- 支持多线程。
- 支持Python 2.x和Python 3.x。
- 日志信息输出到标准输出或文件。
4. 示例代码
下面是使用logging和colorlog模块记录日志的示例代码,包括写文件和不写文件两种格式。文章来源:https://www.toymoban.com/news/detail-682649.html
import logging
import colorlog
def init_logger(logfile, loglevel):
"""初始化日志记录器
Args:
logfile: 日志文件名,不写入日志文件则传入None
loglevel: 日志级别,可选值为debug、info、warning、error、critical
Returns:
logger: 返回初始化后的logger对象
"""
# 创建logger对象
logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)
# 创建控制台输出handler
console_handler = colorlog.StreamHandler()
console_handler.setFormatter(colorlog.ColoredFormatter(
'%(log_color)s[%(asctime)s %(levelname)s] %(message)s',
datefmt='%Y-%m-%d %H:%M:%S',
log_colors={
'DEBUG': 'cyan',
'INFO': 'green',
'WARNING': 'yellow',
'ERROR': 'red',
'CRITICAL': 'red,bg_white'
}
))
logger.addHandler(console_handler)
if logfile:
# 创建文件输出handler
file_handler = logging.FileHandler(logfile, encoding='utf-8')
file_handler.setLevel(logging.DEBUG)
file_handler.setFormatter(logging.Formatter(
'%(asctime)s [%(levelname)s] %(message)s',
datefmt='%Y-%m-%d %H:%M:%S'
))
logger.addHandler(file_handler)
# 设置日志级别
if loglevel == 'debug':
logger.setLevel(logging.DEBUG)
elif loglevel == 'info':
logger.setLevel(logging.INFO)
elif loglevel == 'warning':
logger.setLevel(logging.WARNING)
elif loglevel == 'error':
logger.setLevel(logging.ERROR)
elif loglevel == 'critical':
logger.setLevel(logging.CRITICAL)
return logger
if __name__ == '__main__':
# 初始化日志记录器,不写文件
logger = init_logger(None, 'debug')
logger.debug('debug message')
logger.info('info message')
logger.warning('warning message')
logger.error('error message')
logger.critical('critical message')
# 初始化日志记录器,写文件
logger = init_logger('test.log', 'info')
logger.debug('debug message')
logger.info('info message')
logger.warning('warning message')
logger.error('error message')
logger.critical('critical message')
上述代码中,init_logger()函数用于初始化日志记录器,并返回初始化好的logger对象。该函数接收两个参数:logfile和loglevel。如果logfile为None,则不写入日志文件;如果logfile为一个文件名,则将日志信息写入该文件中。loglevel为日志级别,文章来源地址https://www.toymoban.com/news/detail-682649.html
到了这里,关于Python模块之logging和colorlog的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!