python之logging使用

目标:
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')


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值