LogHandler.py 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  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. if not os.path.exists(LOG_PATH):
  31. os.mkdir(LOG_PATH)
  32. class LogHandler(logging.Logger):
  33. """
  34. LogHandler
  35. """
  36. def __init__(self, name, level=DEBUG, stream=True, file=True):
  37. self.name = name
  38. self.level = level
  39. logging.Logger.__init__(self, self.name, level=level)
  40. if stream:
  41. self.__setStreamHandler__()
  42. if file:
  43. self.__setFileHandler__()
  44. def __setFileHandler__(self, level=None):
  45. """
  46. set file handler
  47. :param level:
  48. :return:
  49. """
  50. file_name = os.path.join(LOG_PATH, '{name}.log'.format(name=self.name))
  51. # 设置日志回滚, 保存在log目录, 一天保存一个文件, 保留15天
  52. file_handler = TimedRotatingFileHandler(filename=file_name, when='D', interval=1, backupCount=15)
  53. file_handler.suffix = '%Y%m%d.log'
  54. if not level:
  55. file_handler.setLevel(self.level)
  56. else:
  57. file_handler.setLevel(level)
  58. formatter = logging.Formatter('%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s')
  59. file_handler.setFormatter(formatter)
  60. self.file_handler = file_handler
  61. self.addHandler(file_handler)
  62. def __setStreamHandler__(self, level=None):
  63. """
  64. set stream handler
  65. :param level:
  66. :return:
  67. """
  68. stream_handler = logging.StreamHandler()
  69. formatter = logging.Formatter('%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s')
  70. stream_handler.setFormatter(formatter)
  71. if not level:
  72. stream_handler.setLevel(self.level)
  73. else:
  74. stream_handler.setLevel(level)
  75. self.addHandler(stream_handler)
  76. def resetName(self, name):
  77. """
  78. reset name
  79. :param name:
  80. :return:
  81. """
  82. self.name = name
  83. self.removeHandler(self.file_handler)
  84. self.__setFileHandler__()
  85. if __name__ == '__main__':
  86. log = LogHandler('test')
  87. log.info('this is a test msg')