目标:
1.从配置文件读取日志配置
2.控制台根据不同日志级别打印不同颜色
3.保存日志到指定位置,指定等级信息以及日志分割与保留规则
congfig.yml
logging:
console:
level: debug
file:
level: info
prefix_name: demo
log.py
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
@AUTHOR: tyc
@VERSION: 1.0.0
@DESCRIPTION: 配置日志
@time: 2021-06-12 09:33:26
"""
import logging
import os
from datetime import datetime
from logging.handlers import TimedRotatingFileHandler
import colorlog
import yaml
# 配置console不同级别打印颜色
log_colors_config = {
'DEBUG': 'cyan',
'INFO': 'green',
'WARNING': 'yellow',
'ERROR': 'red',
'CRITICAL': 'red',
}
# 配置config配置文件与之对应
logging_level_config = {
'debug': logging.DEBUG,
'info': logging.INFO,
'warn': logging.WARN,
'error': logging.ERROR
}
def _getLogger_():
# 读取配置文件信息
# todo 将更多信息放入配置
cong_file_name = 'config.yml'
cur_path = os.path.abspath('.')
config_path = os.path.join(cur_path, cong_file_name)
with open(config_path, 'r', encoding='utf-8') as f:
content = f.read()
content_yml = yaml.load(content, Loader=yaml.FullLoader)
console_level = content_yml.get('logging').get('console').get('level')
logs_level = content_yml.get('logging').get('file').get('level')
file_prefix_name = content_yml.get('logging').get('file').get('prefix_name')
# 创建logger,配置打印级别
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)
console_level = logging_level_config.get(console_level) # 控制台打印级别
# 定义打印格式
console_formatter = colorlog.ColoredFormatter('%(log_color)s%(asctime)s-%(filename)s-[line:%(lineno)d]-['
'thread_id:%(thread)d]-%(levelname)s: %(message)s',
log_colors=log_colors_config)
formatter = logging.Formatter(
'%(asctime)s-%(filename)s-[line:%(lineno)d]-[thread_id:%(thread)d]-%(levelname)s: %(message)s')
# 创建handler输出到文件handler
log_name = [] # 日志文件名不带后缀
log_name = file_prefix_name+'-'+datetime.now().strftime('%Y%m%d') # 日志文件名不带后缀
log_path = os.path.abspath('.') + "\\logs"
isExists = os.path.exists(log_path)
if not isExists:
os.makedirs(log_path)
full_log_name = log_path + '\\' + log_name + '.log'
file_handler = logging.FileHandler(full_log_name)
file_handler.setFormatter(formatter)
# 创建handler输出到控制台
console_handler = logging.StreamHandler()
console_handler.setLevel(console_level)
console_handler.setFormatter(console_formatter)
# 创建TimedRotatingFileHandler
time_rotating_file_handler = TimedRotatingFileHandler(filename=full_log_name, when="midnight", interval=1,
backupCount=7) # 每天产生一个日志文件 backupCount: 表示日志文件的保留个数
time_rotating_file_handler.setFormatter(formatter)
time_rotating_file_handler.setLevel(logging_level_config.get(logs_level)) # 配置日志文件打印级别
# 添加handler
logger.addHandler(file_handler)
logger.addHandler(console_handler)
logger.addHandler(time_rotating_file_handler)
# 防止重复打印
logger.removeHandler(file_handler)
return logger
log = _getLogger_()
测试
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
@AUTHOR: tyc
@VERSION: 1.0.0
@DESCRIPTION:
@time: 2021-06-12 09:35:06
"""
from log import log
log.debug('0000000')
log.info('11111111:%s','aaaa')
log.warn('22222222')
log.error('3333333')