python日志打印之log封装

使用logging四大组件记录日志

  1. 需求
    现在有以下几个日志记录的需求:
    1)要求将所有级别的所有日志都写入磁盘文件中
    2)all.log文件中记录所有的日志信息,日志格式为:日期和时间 - 日志级别 - 日志信息
    3)error.log文件中单独记录error及以上级别的日志信息,日志格式为:日期和时间 - 日志级别 - 文件名[:行号] - 日志信息
    4)要求all.log在每天凌晨进行日志切割

  2. 分析
    1)要记录所有级别的日志,因此日志器的有效level需要设置为最低级别–DEBUG;
    2)日志需要被发送到两个不同的目的地,因此需要为日志器设置两个handler;另外,两个目的地都是磁盘文件,因此这两个handler都是与FileHandler相关的;
    3)all.log要求按照时间进行日志切割,因此他需要用logging.handlers.TimedRotatingFileHandler; 而error.log没有要求日志切割,因此可以使用FileHandler;
    4)两个日志文件的格式不同,因此需要对这两个handler分别设置格式器;

#coding=utf-8
import os
import logging
from logging.handlers import TimedRotatingFileHandler
import datetime

#log设置保存路径
log_path = os.path.join("D:/InterfaceTest/",'result')

class Logger(object):
    def __init__(self,logger_name='mylogger'):
        self.logger = logging.getLogger(logger_name)
        #设置log等级
        self.logger.setLevel(logging.DEBUG)
        self.all_log_file_name = 'all.log'   #all.log文件中记录所有的日志信息,日志格式为:日期和时间 - 日志级别 - 日志信息
        self.log_file_name = 'error.log'     #error.log文件中单独记录error及以上级别的日志信息,日志格式为:日期和时间 - 日志级别 - 文件名[:行号] - 日志信息
        self.backup_count = 7
        self.file_output_level = 'ERROR'    #日志输出级别
        self.formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')   #all.log日志输出格式
        self.errorLog_formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(filename)s[:%(lineno)d] - %(message)s')   #error.log日志输出格式

    def get_logger(self):
        '''在logger中添加日志句柄并返回,如果logger已有句柄,则直接返回'''
        if not self.logger.handlers:
            #记录完整日志 且避免日志重复
            # all.log要求按照时间进行日志切割,因此他需要用logging.handlers.TimedRotatingFileHandler
            console_handler = logging.handlers.TimedRotatingFileHandler(filename=os.path.join(log_path,self.all_log_file_name),when= 'midnight',
                                                                        interval=1,backupCount=7,atTime=datetime.time(0,0,0,0)
                                                                        )
            console_handler.setFormatter(self.formatter)
            self.logger.addHandler(console_handler)
            file_handler = logging.handlers.TimedRotatingFileHandler(filename=os.path.join(log_path,self.log_file_name),when= 'D',
                                                                        interval=1,backupCount=7,atTime=datetime.time(0,0,0,0)
                                                                        )
            file_handler.setFormatter(self.errorLog_formatter)
            file_handler.setLevel(self.file_output_level)
            self.logger.addHandler(file_handler)
        return self.logger


if __name__ == '__main__':
    logger = Logger().get_logger()
    logger.debug('debug mesage')
    logger.info('info message')
    logger.warning("this is a waring log")
    logger.error('error message')

all.log文件输出:
2019-12-16 12:45:51,651 - mylogger - DEBUG - debug mesage
2019-12-16 12:45:51,651 - mylogger - INFO - info message
2019-12-16 12:45:51,651 - mylogger - WARNING - this is a waring log
2019-12-16 12:45:51,651 - mylogger - ERROR - error message
2019-12-16 12:49:52,888 - mylogger - DEBUG - debug mesage
2019-12-16 12:49:52,888 - mylogger - INFO - info message
2019-12-16 12:49:52,888 - mylogger - WARNING - this is a waring log
2019-12-16 12:49:52,888 - mylogger - ERROR - error message
2019-12-16 12:56:17,526 - mylogger - DEBUG - debug mesage
2019-12-16 12:56:17,526 - mylogger - INFO - info message
2019-12-16 12:56:17,526 - mylogger - WARNING - this is a waring log
2019-12-16 12:56:17,526 - mylogger - ERROR - error message
2019-12-16 13:01:11,692 - mylogger - DEBUG - debug mesage
2019-12-16 13:01:11,692 - mylogger - INFO - info message
2019-12-16 13:01:11,692 - mylogger - WARNING - this is a waring log
2019-12-16 13:01:11,692 - mylogger - ERROR - error message

error.log文件输出:
2019-12-16 12:45:51,651 - mylogger - ERROR - log.py[:53] - error message
2019-12-16 12:49:52,888 - mylogger - ERROR - runAll.py[:29] - error message
2019-12-16 12:56:17,526 - mylogger - ERROR - runAll.py[:29] - error message
2019-12-16 13:01:11,692 - mylogger - ERROR - runAll.py[:29] - error message

参考文档:https://www.cnblogs.com/yyds/p/6901864.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值