123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- #!/usr/bin/python
- # -*- coding: UTF-8 -*-
- #
- #
- # author: Scott Chen
- # date: 2020-01-03
- import os
- import time
- import logging
- from logging.handlers import RotatingFileHandler
- class LogWare:
- def __init__(self):
- self.__log_size = 3 * 1024 * 1024
- self.__backup_count = 100
- self.__log_dir = 'd:/data/logs/'
- self.__project_name = 'idcard_reader_web'
- self.__log_file_prefix = 'my-log'
- self.__formatter = logging.Formatter('[%(asctime)s][%(threadName)s][%(levelname)s][%(filename)s][%(lineno)d] %(message)s', '%Y-%m-%d %H:%M:%S')
- self.__log_dir = self.__log_dir + self.__project_name
- self.__timestamp = time.strftime("%Y-%m-%d", time.localtime())
- self.__log_file_name = '{}_{}.log'.format(self.__log_file_prefix, self.__timestamp)
- self.__log_path = os.path.join(self.__log_dir, self.__log_file_name)
- if os.path.exists(self.__log_dir) and os.path.isdir(self.__log_dir):
- pass
- else:
- os.makedirs(self.__log_dir)
- self.__logger = logging.getLogger("")
- # 坑坑! 此处要整体设置 logger level = DEBUG,否则后面在不同的 handler 中设置 level 无效
- self.__logger.setLevel(logging.DEBUG)
- def get_logger(self):
- # 控制台
- # 不同 level, 颜色不同
- console_handler = logging.StreamHandler()
- console_handler.setLevel(logging.DEBUG)
- console_handler.setFormatter(self.__formatter)
- # 此处通过文件大小截断日志文件,如果想要通过时间截断,可以使用 TimedRotatingFileHandler 这个类
- file_handler = logging.handlers.RotatingFileHandler(filename=self.__log_path, mode='a',
- maxBytes=self.__log_size,
- encoding='utf8', backupCount=self.__backup_count)
- file_handler.setFormatter(self.__formatter)
- # 日志文件输出
- self.__logger.addHandler(file_handler)
- self.__logger.addHandler(console_handler)
- self.__logger.setLevel(logging.DEBUG)
- return self.__logger
- # ########## 单元测试 ##########
- # 外部使用时,引入
- from log_ware import LogWare
- logger = LogWare().get_logger()
- if __name__ == '__main__':
- pass
- i = 0
- while True:
- logger.debug("level debug %s %s %d", 'aaaa', 'bbb', 10)
- logger.info("level info")
- logger.warning('level warning')
- logger.error("level error")
- logger.critical('level critical')
- i += 1
- if i == 10: break
|