Path: csiph.com!fu-berlin.de!uni-berlin.de!not-for-mail From: Peter Otten <__peter__@web.de> Newsgroups: de.comp.lang.python Subject: Re: [Python-de] Loggen in unterschiedliche Dateien Date: Fri, 05 Aug 2016 09:53:43 +0200 Organization: None Lines: 50 Message-ID: References: Mime-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 8Bit X-Trace: news.uni-berlin.de O1Gb/bBwhnWuqoCzwesxnAvQVOQMIsIUXchV9vZJekCw== Return-Path: X-Original-To: python-de@python.org Delivered-To: python-de@mail.python.org X-Injected-Via-Gmane: http://gmane.org/ User-Agent: KNode/4.13.3 X-BeenThere: python-de@python.org X-Mailman-Version: 2.1.22 Precedence: list List-Id: Die Deutsche Python Mailingliste List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Mailman-Original-Message-ID: X-Mailman-Original-References: Xref: csiph.com de.comp.lang.python:4505 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