logger.py 1.0 KB

12345678910111213141516171819202122232425262728293031
  1. from datetime import datetime, timedelta
  2. from logging.handlers import TimedRotatingFileHandler
  3. import os
  4. import logging
  5. maxkb_logger = logging.getLogger('max_kb')
  6. class DailyTimedRotatingFileHandler(TimedRotatingFileHandler):
  7. def rotator(self, source, dest):
  8. """ Override the original method to rotate the log file daily."""
  9. dest = self._get_rotate_dest_filename(source)
  10. if os.path.exists(source) and not os.path.exists(dest):
  11. # 存在多个服务进程时, 保证只有一个进程成功 rotate
  12. # os.rename(source, dest)
  13. import shutil
  14. shutil.copy2(source, dest)
  15. @staticmethod
  16. def _get_rotate_dest_filename(source):
  17. date_yesterday = (
  18. datetime.now() - timedelta(days=1)
  19. ).strftime('%Y-%m-%d')
  20. path = [
  21. os.path.dirname(source),
  22. date_yesterday,
  23. os.path.basename(source)
  24. ]
  25. filename = os.path.join(*path)
  26. os.makedirs(os.path.dirname(filename), 0o700, exist_ok=True)
  27. return filename