rkoch83--- via python-de wrote:
Am Donnerstag, 4. August 2016 16:48:42 UTC+2 schrieb Peter Otten:
Du wirst vom Blitz getroffen und dann von einem Bus überfahren ;)
Eieiei, dann sollte ich mich von Busfahrern fernhalten, die Python können, hm?
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()
Ok, das scheint mir etwas eleganter zu sein, aber wirklich "einfach" ist es auch nicht. (Ich weiß, das ist Ansichtssache. Daher die Anführungszeichen. :-)) Was ich nciht ganz verstehe ist, wieso ein existierender Logger (incl. seines FileHandlers) benutzt wird, obwohl ich explizit einen neuen anlege. Mit einem eigenen Namen wohlgemerkt! (Ich habe durchaus gelesen, dass getLogger(), mit einem existierenden Namen aufgerufen, auch den bereits existierenden Logger ausgibt.)
Die Logger bilden eine Hierarchie mit dem Root-Logger an der Spitze, der also in der Regel alle Nachrichten sieht und dessen Handler für die Verarbeitung aller Nachrichten zuständig sind. Man kann bei Bedarf einen Logger-"Zweig" abtrennen:
import logging logging.basicConfig(level=logging.INFO) foo = logging.getLogger("foo") foo.info("here") INFO:foo:here foo.propagate = False foo.info("there") No handlers could be found for logger "foo"
https://docs.python.org/dev/library/logging.html#logging.Logger.propagate