def configure_datetime_logfile(config, handler): try: filename_format = config.logging[handler]['filename_format'] except KeyError: log.error('filename_format not configured for handler {0}'.format(handler)) return try: pkg = "{0}-{1}".format(os.path.basename(config.context.package.arg), randword(6)) filename = os.path.join(config.log_root, filename_format.format(pkg, datetime.utcnow())) except IndexError: log.exception("missing replacement fields in {0}'s filename_format") # find handler amongst all the loggers and reassign the filename/stream for h in [x for l in logging.root.manager.loggerDict for x in logging.getLogger(l).handlers] + logging.root.handlers: if getattr(h, 'name', '') == handler: assert isinstance(h, logging.FileHandler) h.stream.close() h.baseFilename = filename h.stream = open(filename, 'a') url_template = config.logging[handler].get('web_log_url_template', False) if url_template: url_attrs = config.context.web_log.toDict() url_attrs['logfile'] = os.path.basename(filename) url = url_template.format(**url_attrs) log.info('Detailed {0} output to {1}'.format(handler, url)) else: log.info('Detailed {0} output to {1}'.format(handler, filename)) break else: log.error('{0} handler not found.'.format(handler))
def configure_datetime_logfile(config, handler): try: filename_format = config.logging[handler]['filename_format'] except KeyError: log.error('filename_format not configured for handler {0}'.format(handler)) return try: pkg = "{0}-{1}".format(os.path.basename(config.context.package.arg), randword(6)) filename = os.path.join(config.log_root, filename_format.format(pkg, datetime.utcnow())) except IndexError: errstr = 'Missing replacement fields in filename_format for handler {0}'.format(handler) log.error(errstr) log.debug(errstr, exc_info=True) # find handler amongst all the loggers and reassign the filename/stream for h in [x for l in logging.root.manager.loggerDict for x in logging.getLogger(l).handlers] + logging.root.handlers: if getattr(h, 'name', '') == handler: assert isinstance(h, logging.FileHandler) h.stream.close() h.baseFilename = filename h.stream = open(filename, 'a') url_template = config.logging[handler].get('web_log_url_template', False) if url_template: url_attrs = config.context.web_log.toDict() url_attrs['logfile'] = os.path.basename(filename) url = url_template.format(**url_attrs) log.info('Detailed {0} output to {1}'.format(handler, url)) else: log.info('Detailed {0} output to {1}'.format(handler, filename)) break else: log.error('{0} handler not found.'.format(handler))
def unique_name(self): context = self._config.context if hasattr(self, "_unique_name"): return self._unique_name self._unique_name = "{0}-{1}".format(context.ami.name, randword(6)) return self._unique_name