Skip to content

Instantly share code, notes, and snippets.

@hirose31
Created February 6, 2018 09:37
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save hirose31/89c7b8cc4312f46e2447a3c9144af333 to your computer and use it in GitHub Desktop.
Save hirose31/89c7b8cc4312f46e2447a3c9144af333 to your computer and use it in GitHub Desktop.
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import logging
import logging.handlers
import freezegun
import time
import os
class StampedFileHandler(logging.FileHandler):
def __init__(self, filename, suffix='%Y%m%d', mode='a', encoding=None, delay=False):
self.suffix = suffix
self.origFilename = os.path.abspath(filename)
stamped_filename = self._stamped_filename()
super().__init__(stamped_filename, mode, encoding, delay)
def _stamped_filename(self):
return '%s.%s' % (self.origFilename, time.strftime(self.suffix, time.localtime()))
def emit(self, record):
stamped_filename = self._stamped_filename()
if self.baseFilename != stamped_filename:
self.baseFilename = stamped_filename
self.close()
super().emit(record)
def main():
with freezegun.freeze_time('2017-12-31 14:59:58') as freezer:
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)
formatter = logging.Formatter('%(asctime)s (%(name)-9s) [%(levelname)-7s] %(message)s')
file_handler = StampedFileHandler(
'/tmp/test.log',
)
file_handler.setFormatter(formatter)
logger.addHandler(file_handler)
for i in range(5):
logger.info("Hello, %d", i)
freezer.tick()
if __name__ == '__main__':
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment