目录
前言
控制log的打印级别,打印格式,控制台根据log级别打印不同的颜色
一、引入库
import logging
import colorlog
import datetime
import os
二、实现代码
import logging
import colorlog
import datetime
import os
class Logging(object):
def log(self, level='INFO'): # 生成日志的主方法,传入对那些级别及以上的日志进行处理
log_colors_config = {
'DEBUG': 'white',
'INFO': 'white',
'WARNING': 'yellow',
'ERROR': 'red',
'CRITICAL': 'bold_red',
}
logger = logging.getLogger() # 创建日志器
# levle = getattr(logging, level) # 获取日志模块的的级别对象属性
logger.setLevel(level) # 设置日志级别
# console_handler.setLevel(logging.DEBUG)
# file_handler.setLevel(logging.INFO)
root_path = os.getcwd()
file_name = datetime.datetime.now().strftime('%Y%m%d_%H%M%S') + ".log"
log_path = os.path.join(root_path, r"output\logfiles", file_name)
if not logger.handlers: # 作用,防止重新生成处理器
sh = logging.StreamHandler() # 创建控制台日志处理器
fh = logging.FileHandler(filename=log_path, mode='a', encoding="utf-8") # 创建日志文件处理器
# 创建格式器
fmt = logging.Formatter(
fmt='[%(asctime)s.%(msecs)03d] %(filename)s:%(lineno)d [%(levelname)s]: %(message)s',
datefmt='%Y-%m-%d %H:%M:%S')
sh_fmt = colorlog.ColoredFormatter(
fmt='%(log_color)s[%(asctime)s.%(msecs)03d] %(filename)s:%(lineno)d [%(levelname)s]: %(message)s',
datefmt='%Y-%m-%d %H:%M:%S',
log_colors=log_colors_config)
# 给处理器添加格式
sh.setFormatter(fmt=sh_fmt)
fh.setFormatter(fmt=fmt)
# 给日志器添加处理器,过滤器一般在工作中用的比较少,如果需要精确过滤,可以使用过滤器
logger.addHandler(sh)
logger.addHandler(fh)
return logger # 返回日志器
if __name__ == '__main__':
logger = Logging().log(level='INFO')
logger.debug("11111111111")
logger.info("22222222")
logger.warning("33333333")
控制台根据log级别打印不同的颜色,注意以下代码:
sh_fmt = colorlog.ColoredFormatter(
fmt='%(log_color)s[%(asctime)s.%(msecs)03d] %(filename)s:%(lineno)d [%(levelname)s]: %(message)s',
datefmt='%Y-%m-%d %H:%M:%S',
log_colors=log_colors_config)
# 给处理器添加格式
sh.setFormatter(fmt=sh_fmt)
三、运行结果
[2022-10-11 14:50:54.449] t1.py:53 [INFO]: 22222222
[2022-10-11 14:50:54.449] t1.py:54 [WARNING]: 33333333
设置的log级别是INFO, 结果没有显示Debug级别的log.
四、补充知识
logging模块的日志级别
logging模块默认定义了以下几个日志等级。
日志等级(level) | 描述 |
---|---|
DEBUG | 最详细的日志信息,典型应用场景是 问题诊断 |
INFO | 信息详细程度仅次于DEBUG,通常只记录关键节点信息,用于确认一切都是按照我们预期的那样进行工作 |
WARNING | 当某些不期望的事情发生时记录的信息(如,磁盘可用空间较低),但是此时应用程序还是正常运行的 |
ERROR | 由于一个更严重的问题导致某些功能不能正常运行时记录的信息 |
CRITICAL | 当发生严重错误,导致应用程序不能继续运行时记录的信息 |