LogHandler.py 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  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. 2017/9/21: 屏幕输出/文件输出 可选(默认屏幕和文件均输出)
  12. -------------------------------------------------
  13. """
  14. __author__ = 'JHao'
  15. import os
  16. import logging
  17. from logging.handlers import TimedRotatingFileHandler
  18. # 日志级别
  19. CRITICAL = 50
  20. FATAL = CRITICAL
  21. ERROR = 40
  22. WARNING = 30
  23. WARN = WARNING
  24. INFO = 20
  25. DEBUG = 10
  26. NOTSET = 0
  27. CURRENT_PATH = os.path.dirname(os.path.abspath(__file__))
  28. ROOT_PATH = os.path.join(CURRENT_PATH, os.pardir)
  29. LOG_PATH = os.path.join(ROOT_PATH, 'log')
  30. try:
  31. os.mkdir(LOG_PATH)
  32. except FileExistsError:
  33. pass
  34. class LogHandler(logging.Logger):
  35. """
  36. LogHandler
  37. """
  38. def __init__(self, name, level=DEBUG, stream=True, file=True):
  39. self.name = name
  40. self.level = level
  41. logging.Logger.__init__(self, self.name, level=level)
  42. if stream:
  43. self.__setStreamHandler__()
  44. if file:
  45. self.__setFileHandler__()
  46. def __setFileHandler__(self, level=None):
  47. """
  48. set file handler
  49. :param level:
  50. :return:
  51. """
  52. file_name = os.path.join(LOG_PATH, '{name}.log'.format(name=self.name))
  53. # 设置日志回滚, 保存在log目录, 一天保存一个文件, 保留15天
  54. file_handler = TimedRotatingFileHandler(filename=file_name, when='D', interval=1, backupCount=15)
  55. file_handler.suffix = '%Y%m%d.log'
  56. if not level:
  57. file_handler.setLevel(self.level)
  58. else:
  59. file_handler.setLevel(level)
  60. formatter = logging.Formatter('%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s')
  61. file_handler.setFormatter(formatter)
  62. self.file_handler = file_handler
  63. self.addHandler(file_handler)
  64. def __setStreamHandler__(self, level=None):
  65. """
  66. set stream handler
  67. :param level:
  68. :return:
  69. """
  70. stream_handler = logging.StreamHandler()
  71. formatter = logging.Formatter('%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s')
  72. stream_handler.setFormatter(formatter)
  73. if not level:
  74. stream_handler.setLevel(self.level)
  75. else:
  76. stream_handler.setLevel(level)
  77. self.addHandler(stream_handler)
  78. def resetName(self, name):
  79. """
  80. reset name
  81. :param name:
  82. :return:
  83. """
  84. self.name = name
  85. self.removeHandler(self.file_handler)
  86. self.__setFileHandler__()
  87. if __name__ == '__main__':
  88. log = LogHandler('test')
  89. log.info('this is a test msg')