![](https://secure.gravatar.com/avatar/e88b046bd99c34714b60a04eaf51d334.jpg?s=120&d=mm&r=g)
rkoch83--- via python-de wrote:
Ok, Ingrid habe jetzt hiermit erreicht was ich wollte:
Version 3 ========= logger = logging.getLogger(experiment) logger.handlers = [] logger.addHandler(logging.FileHandler( filename="/home/xnat/xnat_data/logs/{}_{}.log".format(project, experiment))) logger.handlers[-1].setFormatter(logging.Formatter('%(asctime)s - %(name)s - %(levelname)s: %(message)s')) logger.setLevel(logging.DEBUG)
logger.info("Project: {}, Experiment: {}".format(project, experiment))
del logging.Logger.manager.loggerDict[experiment] =========
Es erscheint mir nicht besonders elegant oder "pythonic" so in die Eingeweide des Moduls einzugreifen. Geht das schöner? Welche Risiken birgt diese Vorgehensweise?
Du wirst vom Blitz getroffen und dann von einem Bus überfahren ;) Im Ernst, ich würde wahrscheinlich nur die Zieldatei des FileHandlers variieren und alles andere in Ruhe lassen. Hier mein Versuch, die wesentlichen Teile vom RotatingFileHandler zu klauen: import logging import os class RetargetableFileHandler(logging.FileHandler): def retarget(self, filename): if self.stream: self.stream.close() self.stream = None self.baseFilename = os.path.abspath(filename) if not self.delay: self.stream = self._open() def get_filename(project, experiment): return "/home/xnat/xnat_data/logs/{}_{}.log".format(project, experiment) first = True project = "spam" for experiment in ["foo", "bar", "baz"]: if first: # run once logger = logging.getLogger() handler = RetargetableFileHandler(get_filename(project, experiment)) handler.setFormatter( logging.Formatter( '%(asctime)s - %(name)s - %(levelname)s: %(message)s')) logger.addHandler(handler) logger.setLevel(logging.DEBUG) first = False else: # specify new destination handler.retarget(get_filename(project, experiment)) # log something logger.info("Project: {}, Experiment: {}".format(project, experiment))