python 封装日志logging

发布时间 2023-10-17 14:30:05作者: zwnsyw
#!/usr/bin/python
# -*- coding:utf-8 -*-
import logging
import time
import os


class Log(object):
    '''
   封装后的logging
    '''
    def __init__(self, logger=None, log_cate='search'):
        '''
         指定保存日志的文件路径,日志级别,以及调用文件
         将日志存入到指定的文件中
        '''
        # 创建一个logger
        self.logger = logging.getLogger(logger)
        self.logger.setLevel(logging.DEBUG)
        # 创建一个handler,用于写入日志文件
        self.log_time = time.strftime("%Y_%m_%d")
        file_dir = os.getcwd() + './log'
        if not os.path.exists(file_dir):
            os.mkdir(file_dir)
        self.log_path = file_dir
        self.log_name = self.log_path + "/" + log_cate + "." + self.log_time + '.log'
        # print(self.log_name)

        fh = logging.FileHandler(self.log_name, 'w', encoding='utf-8') # 这个是python3的  a 追加,w覆盖
        fh.setLevel(logging.INFO)

        # 再创建一个handler,用于输出到控制台
        ch = logging.StreamHandler()
        ch.setLevel(logging.INFO)

        # 定义handler的输出格式
        formatter = logging.Formatter(
            '[%(asctime)s] %(filename)s->%(funcName)s line:%(lineno)d [%(levelname)s]%(message)s')
        fh.setFormatter(formatter)
        ch.setFormatter(formatter)

        # 给logger添加handler
        self.logger.addHandler(fh)
        self.logger.addHandler(ch)

        # 添加下面一句,在记录日志之后移除句柄
        # self.logger.removeHandler(ch)
        # self.logger.removeHandler(fh)
        # 关闭打开的文件
        fh.close()
        ch.close()

    def getlog(self):
        return self.logger


if __name__ == '__main__':
    mlog  = Log().getlog()
    mlog.info("消息")
    mlog.debug('This message should appear on the console')
    mlog.info('So should this')
    mlog.warning('And this, too')