LogHandler.py 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. # -*- coding: utf-8 -*-
  2. """
  3. -------------------------------------------------
  4. File Name: LogHandler.py
  5. Description :
  6. Author : JHao
  7. date: 2017/3/6
  8. -------------------------------------------------
  9. Change Activity:
  10. 2017/3/6: log handler
  11. -------------------------------------------------
  12. """
  13. __author__ = 'JHao'
  14. import os
  15. import logging
  16. from logging.handlers import TimedRotatingFileHandler
  17. # 日志级别
  18. CRITICAL = 50
  19. FATAL = CRITICAL
  20. ERROR = 40
  21. WARNING = 30
  22. WARN = WARNING
  23. INFO = 20
  24. DEBUG = 10
  25. NOTSET = 0
  26. CURRENT_PATH = os.path.dirname(os.path.abspath(__file__))
  27. ROOT_PATH = os.path.join(CURRENT_PATH, os.pardir)
  28. LOG_PATH = os.path.join(ROOT_PATH, 'log')
  29. class LogHandler(logging.Logger):
  30. """
  31. LogHandler
  32. """
  33. def __init__(self, name, level=DEBUG):
  34. self.name = name
  35. self.level = level
  36. logging.Logger.__init__(self, self.name, level=level)
  37. self.__setFileHandler__()
  38. self.__setStreamHandler__()
  39. def __setFileHandler__(self, level=None):
  40. """
  41. set file handler
  42. :param level:
  43. :return:
  44. """
  45. file_name = os.path.join(LOG_PATH, '{name}.log'.format(name=self.name))
  46. # 设置日志回滚, 保存在log目录, 一天保存一个文件, 保留15天
  47. file_handler = TimedRotatingFileHandler(filename=file_name, when='D', interval=1, backupCount=15)
  48. file_handler.suffix = '%Y%m%d.log'
  49. if not level:
  50. file_handler.setLevel(self.level)
  51. else:
  52. file_handler.setLevel(level)
  53. formatter = logging.Formatter('%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s')
  54. file_handler.setFormatter(formatter)
  55. self.file_handler = file_handler
  56. self.addHandler(file_handler)
  57. def __setStreamHandler__(self, level=None):
  58. """
  59. set stream handler
  60. :param level:
  61. :return:
  62. """
  63. stream_handler = logging.StreamHandler()
  64. formatter = logging.Formatter('%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s')
  65. stream_handler.setFormatter(formatter)
  66. if not level:
  67. stream_handler.setLevel(self.level)
  68. else:
  69. stream_handler.setLevel(level)
  70. self.addHandler(stream_handler)
  71. def resetName(self, name):
  72. """
  73. reset name
  74. :param name:
  75. :return:
  76. """
  77. self.name = name
  78. self.removeHandler(self.file_handler)
  79. self.__setFileHandler__()
  80. if __name__ == '__main__':
  81. log = LogHandler('test')
  82. log.info('this is a test msg')