| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- # -*- 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')
- if not os.path.exists(LOG_PATH):
- os.mkdir(LOG_PATH)
- 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)
- if __name__ == '__main__':
- log = LogHandler('test')
- log.info('this is a test msg')
|