# -*- coding: utf-8 -*- """ ------------------------------------------------- File Name: LogHandler.py Description : 日志操作模块 Author : JHao date: 2017/3/6 ------------------------------------------------- Change Activity: 2017/3/6: log handler 2017/9/21: 屏幕输出/文件输出 可选(默认屏幕和文件均输出) ------------------------------------------------- """ # __author__ = 'JHao' import os import logging from logging.handlers import TimedRotatingFileHandler # # 日志级别 # CRITICAL = 50 # FATAL = CRITICAL # ERROR = 40 # WARNING = 30 # WARN = WARNING # INFO = 20 # DEBUG = 10 # NOTSET = 0 CURRENT_PATH = os.path.dirname(os.path.abspath(__file__)) ROOT_PATH = os.path.join(CURRENT_PATH, os.pardir) LOG_PATH = os.path.join(ROOT_PATH, 'log') try: os.mkdir(LOG_PATH) except FileExistsError: pass class LogHandler(logging.Logger): """ LogHandler """ # def __init__(self, name, level=DEBUG, stream=True, file=True): # self.name = name # self.level = level # logging.Logger.__init__(self, self.name, level=level) # if stream: # self.__setStreamHandler__() # if file: # self.__setFileHandler__() # def __setFileHandler__(self, level=None): # """ # set file handler # :param level: # :return: # """ # file_name = os.path.join(LOG_PATH, '{name}.log'.format(name=self.name)) # # 设置日志回滚, 保存在log目录, 一天保存一个文件, 保留15天 # file_handler = TimedRotatingFileHandler(filename=file_name, when='D', interval=1, backupCount=15) # file_handler.suffix = '%Y%m%d.log' # if not level: # file_handler.setLevel(self.level) # else: # file_handler.setLevel(level) # formatter = logging.Formatter('%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s') # # file_handler.setFormatter(formatter) # self.file_handler = file_handler # self.addHandler(file_handler) # # def __setStreamHandler__(self, level=None): # """ # set stream handler # :param level: # :return: # """ # stream_handler = logging.StreamHandler() # formatter = logging.Formatter('%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s') # stream_handler.setFormatter(formatter) # if not level: # stream_handler.setLevel(self.level) # else: # stream_handler.setLevel(level) # self.addHandler(stream_handler) # # def resetName(self, name): # """ # reset name # :param name: # :return: # """ # self.name = name # self.removeHandler(self.file_handler) # self.__setFileHandler__() if __name__ == '__main__': log = LogHandler('test') log.info('this is a test msg')