logging
logging:这个模块为应用与库实现了灵活的事件日志系统的函数与类。
简单示例:
$ import logging
$ logging.warning('Watch out!')
$ WARNING:root:Watch out!
日志级别
默认分为六种日志级别(括号为级别对应的数值):
- CRITICAL 50
- ERROR 40
- WARNING 30
- INFO 20
- DEBUG 10
- NOTSET 0
注意:自定义日志级别时注意不要和默认的日志级别数值相同,logging 执行时输出大于等于设置的日志级别的日志信息,如设置日志级别是 INFO,则 INFO、WARNING、ERROR、CRITICAL 级别的日志都会输出。
简单示例
import logging
logging.basicConfig(level=logging.INFO, format='%(asctime)s %(levelname)s: %(message)s')
logger = logging.getLogger("Test")
logger.info(".......")
常用示例
import sys
import logging
# 封装为一个方法以便在其他文件中调用
def setup_logging(log_file=".log"):
logging.basicConfig(
level=logging.DEBUG,
format="%(asctime)s %(levelname)s: %(message)s",
datefmt="%Y-%H-%M %H:%M:%S",
handlers=[
logging.FileHandler(log_file),
logging.StreamHandler(sys.stdout)
]
)
return logging.getLogger(__name__)
logger = setup_logging('test.log')
logger.debug('debug message')
logger.info('info message')
logger.warning('warning message')
logger.error('error message')
logger.critical('critical message')
如上代码,需要注意的地方:
- logging.basicConfig(kwargs): 用于配置 logging 模块的基本行为。`kwargs` 是一个可变的关键字参数,可以用来传递各种配置选项。
- 代码中用到了logggin.handlers, 做了两个事情:将日志记录输出到控制台或终端、并输出到磁盘文件。
logging.basicConfig
logging.basicConfig(kwargs) 是 Python logging 模块中的一个函数,用于配置 logging 模块的基本行为。kwargs 是一个可变的关键字参数,可以用来传递各种配置选项。
baseConfig 是 basicConfig 函数中的一个参数,它是一个字典,用于指定 logging 模块的基本配置。该字典包括以下键值对:
- filename:指定日志输出文件的文件名。
- filemode:指定日志输出文件的打开模式,默认为 a(追加模式)。
- format:指定日志输出格式的字符串。
- datefmt:指定日期/时间格式的字符串。
- level:指定日志输出的最低级别。低于该级别的日志消息将被忽略。
- stream:指定日志输出流。默认为 sys.stderr。
- handlers
- encoding
使用 basicConfig 函数可以很方便地配置 logging 模块的基本行为,例如设置日志输出的格式、级别、输出流等。
但是需要注意,该函数只能在程序中调用一次,多次调用会导致 logging 模块的行为不可预测。
logging.handlers
logging.handlers 日志处理程序。官方文档教程
- StreamHandler: 它可将日志记录输出发送到数据流例如 sys.stdout, sys.stderr 或任何文件类对象
- FileHandler: 它可将日志记录输出到磁盘文件中。 它从 StreamHandler 继承了输出功能。
改进
如上logging代码,输出到终端或控制台的日志是不带有颜色的。如果想带有颜色,怎么处理?
要使输出到终端的日志带有颜色,可以使用 colorlog
模块。首先需要安装 colorlog
模块,可以使用以下命令进行安装:
pip install colorlog
然后,可以使用以下代码来改进你的代码:
import sys
import logging
import colorlog
def setup_logging(log_file=".log"):
handler = colorlog.StreamHandler(sys.stdout)
handler.setFormatter(colorlog.ColoredFormatter(
"%(log_color)s%(asctime)s %(levelname)s: %(message)s",
datefmt="%Y-%H-%M %H:%M:%S",
log_colors={
'DEBUG': 'cyan',
'INFO': 'green',
'WARNING': 'yellow',
'ERROR': 'red',
'CRITICAL': 'bold_red',
},
secondary_log_colors={},
style='%'
))
logger = logging.getLogger(__name__)
logger.addHandler(handler)
logger.setLevel(logging.DEBUG)
return logger
logger = setup_logging('test.log')
logger.debug('debug message')
logger.info('info message')
logger.warning('warning message')
logger.error('error message')
logger.critical('critical message')
这个代码使用了 colorlog
模块来创建一个 StreamHandler
,然后使用 ColoredFormatter
格式化日志输出。
log_colors
参数指定了不同级别的日志输出使用的颜色,secondary_log_colors
参数可以用来指定更多的颜色。
最后,将 StreamHandler
添加到 logger 中,并设置 logger 的日志级别为 logging.DEBUG
。这样就可以输出带有颜色的日志信息了。
其它日志库 - loguru
from loguru import logger
logger.info("---")