|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 Stubborn 于 2019-4-14 04:18 编辑
日志模块:详解参考
当你代码写的越来越多的时候,一旦出错,非常辣眼睛,此时logging可以很快速的帮你找到错误地方哦。
- # -*- coding: utf-8 -*-
- __author__ = 'Alex'
- 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')
- 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 absolute_path(self):
- currrent_path = os.path.realpath(__file__) # 文件绝对路径
- current_dir = os.path.split(currrent_path)[0]
- return current_dir
- 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='S', 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.warning('this waring')
- log.info('this info')
复制代码 |
|