handlers.py 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. # coding:utf-8
  2. import codecs
  3. import datetime
  4. import os
  5. from logging.handlers import BaseRotatingHandler
  6. class MidnightRotatingFileHandler(BaseRotatingHandler):
  7. def __init__(self, filename):
  8. self.suffix = "%Y-%m-%d"
  9. self.date = datetime.date.today()
  10. super(BaseRotatingHandler, self).__init__(filename, mode='a', encoding=None, delay=0)
  11. def shouldRollover(self, record):
  12. return self.date != datetime.date.today()
  13. def doRollover(self):
  14. if self.stream:
  15. self.stream.close()
  16. self.stream = None
  17. self.date = datetime.date.today()
  18. def _open(self):
  19. filename = '%s.%s' % (self.baseFilename, self.date.strftime(self.suffix))
  20. if self.encoding is None:
  21. stream = open(filename, self.mode)
  22. else:
  23. stream = codecs.open(filename, self.mode, self.encoding)
  24. if os.path.exists(self.baseFilename):
  25. try:
  26. os.remove(self.baseFilename)
  27. except OSError:
  28. pass
  29. try:
  30. os.symlink(filename, self.baseFilename)
  31. except OSError:
  32. pass
  33. return stream