Seite 1 von 1

Logging in einzelne Dateien auslagern

Verfasst: Dienstag 27. Juni 2017, 15:25
von Blackbenji
Hallo zusammen,

ich möchte gerne mein Logging in separate Dateien aufteilen.
Warum? Weil ich mich bei einer großen Anwendung nicht erst durch ein einziges Logfiles greppen will.

Folgende Idee habe ich bereits angefangen:

Code: Alles auswählen

import logging
import os.path


def initialize_logger(output_dir):
    logger = logging.getLogger()
    logger.setLevel(logging.DEBUG)

    # create error file handler and set level to error
    handler = logging.FileHandler(os.path.join(output_dir, "error.log"), "a+", encoding=None, delay="true")
    handler.setLevel(logging.ERROR)
    formatter = logging.Formatter("%(levelname)s - %(message)s")
    handler.setFormatter(formatter)
    logger.addHandler(handler)

    # create info file handler and set level to info
    handler = logging.FileHandler(os.path.join(output_dir, "info.log"), "a+")
    handler.setLevel(logging.INFO)
    formatter = logging.Formatter("%(levelname)s - %(message)s")
    handler.setFormatter(formatter)
    logger.addHandler(handler)


initialize_logger("logs")

logging.error("Hallo Error")
logging.info("Hallo Info")
Erwartet habe ich:
logging.info loggt in die info.log
logging.error loggt in die error.log

Resultat ist aber:

Code: Alles auswählen

==> error.log <==
ERROR - Hallo Error

==> info.log <==
ERROR - Hallo Error
INFO - Hallo Info
Wie kann ich verhindern dass ERORR in die info.log schreibt?
Ich hatte gehofft durch "handler.setLevel(logging.INFO)" würde das ausreichen?

Re: Logging in einzelne Dateien auslagern

Verfasst: Dienstag 27. Juni 2017, 15:55
von __deets__
So geht das AFAIK nicht. Ein Handler wird immer sein eigenes loglevel darstellen, als auch alle, die darueber sind.

Stattdessen solltest du

- einen anderen Logger fuer den anderen Teil der Applikation nehmen. Also auf Ebene von Funktion und nicht Loglevel teilen.
- dem anderen Logger einen eigenen Handler geben, und die Logger.propagate-Eigenschaft auf False setzten (https://docs.python.org/3/library/loggi ... .propagate)

Re: Logging in einzelne Dateien auslagern

Verfasst: Dienstag 27. Juni 2017, 16:02
von BlackJack
@Blackbenji: Das könnte man mit einem Filter lösen, den man an den Handler hängt.

Re: Logging in einzelne Dateien auslagern

Verfasst: Samstag 1. Juli 2017, 13:28
von nono191
Kann man das nicht einfach mit

Code: Alles auswählen

logging.Logger.propagate = False
lösen?

https://docs.python.org/2/library/loggi ... er-objects