소스 검색

[update] LogHandler.py

jhao 6 년 전
부모
커밋
645a96cea2
1개의 변경된 파일92개의 추가작업 그리고 0개의 파일을 삭제
  1. 92 0
      handler/logHandler.py

+ 92 - 0
handler/logHandler.py

@@ -0,0 +1,92 @@
+# -*- 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')