12345678910111213141516171819202122232425262728293031323334353637383940 |
- # coding:utf-8
- import codecs
- import datetime
- import os
- from logging.handlers import BaseRotatingHandler
- class MidnightRotatingFileHandler(BaseRotatingHandler):
- def __init__(self, filename):
- self.suffix = "%Y-%m-%d"
- self.date = datetime.date.today()
- super(BaseRotatingHandler, self).__init__(filename, mode='a', encoding=None, delay=0)
- def shouldRollover(self, record):
- return self.date != datetime.date.today()
- def doRollover(self):
- if self.stream:
- self.stream.close()
- self.stream = None
- self.date = datetime.date.today()
- def _open(self):
- filename = '%s.%s' % (self.baseFilename, self.date.strftime(self.suffix))
- if self.encoding is None:
- stream = open(filename, self.mode)
- else:
- stream = codecs.open(filename, self.mode, self.encoding)
- if os.path.exists(self.baseFilename):
- try:
- os.remove(self.baseFilename)
- except OSError:
- pass
- try:
- os.symlink(filename, self.baseFilename)
- except OSError:
- pass
- return stream
|