Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > de.comp.lang.python > #4503

Re: [Python-de] Loggen in unterschiedliche Dateien

From Peter Otten <__peter__@web.de>
Newsgroups de.comp.lang.python
Subject Re: [Python-de] Loggen in unterschiedliche Dateien
Date 2016-08-04 16:33 +0200
Organization None
Message-ID <mailman.162.1470322120.6033.python-de@python.org> (permalink)
References <d55e9378-6ce7-4562-a583-7eaa7406c655@googlegroups.com> <bbe0a23e-cfd5-4af8-89a4-5136e9e801d4@googlegroups.com> <nnvjnc$brm$1@blaine.gmane.org>

Show all headers | View raw


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))

Back to de.comp.lang.python | Previous | NextPrevious in thread | Next in thread | Find similar


Thread

Loggen in unterschiedliche Dateien rkoch83@googlemail.com - 2016-08-04 01:35 -0700
  Re: Loggen in unterschiedliche Dateien rkoch83@googlemail.com - 2016-08-04 03:29 -0700
    Re: [Python-de] Loggen in unterschiedliche Dateien Peter Otten <__peter__@web.de> - 2016-08-04 16:33 +0200
      Re: [Python-de] Loggen in unterschiedliche Dateien rkoch83@googlemail.com - 2016-08-04 23:59 -0700
        Re: [Python-de] Loggen in unterschiedliche Dateien Peter Otten <__peter__@web.de> - 2016-08-05 09:53 +0200

csiph-web