Seite 1 von 1

verschiedene Loglevels (daiquiri wrapper)

Verfasst: Dienstag 15. Dezember 2020, 13:58
von cirage
Hallo Pythoners

Ich arbeite erst seit kurzem mit Python. Bin sehr erstaunt über die vielen qualitativ hochwertigen zur Verfügung stehenden Module!

Ich habe jetzt ein Logging Problem, wobei ich das Modul daiquiri als Wrapper zum logging Modul verwende. Ich möchte zwei verschiedene Log-Channels mit unterschiedlichen Log-Levels verwenden.

Als Beispiel möchte ich Log-Level WARNING für Log-Channel STDERR und Log-Level DEBUG für Log-Channel File verwenden:

Code: Alles auswählen

import logging
import daiquiri

daiquiri.setup(
    level=logging.WARNING,
    outputs=(
        daiquiri.output.STDERR,
        daiquiri.output.File(
            filename='gugus_v1.log',
            directory='.',
            level=logging.DEBUG
        )
    )
)

logger = daiquiri.getLogger(__name__)
logger.error('loglevel ERROR ...')
logger.info('loglevel INFO ...')
logger.debug('loglevel DEBUG ...')

# --> STDERR:
# --> 2020-12-14 19:48:01,124 [25755] ERROR    __main__: loglevel ERROR ...
# --> File (either INFO nor DEBUG messages):
# --> 2020-12-14 19:48:01,124 [25755] ERROR    __main__: loglevel ERROR ... 
Dies funktioniert leider nicht. In dieser Version gibt es beim Log-Output keine unterschiedlichen Log-Levels.

Werden die Log-Levels hingegen in umgekehrter Reihenfolge aufgeführt, erhalte ich tatsächlich verschiedene Loglevels:

Code: Alles auswählen

import logging
import daiquiri

daiquiri.setup(
    level=logging.INFO,
    outputs=(
        daiquiri.output.STDERR,
        daiquiri.output.File(
            filename='gugus_2.log',
            directory='.',
            level=logging.WARNING
        )
    )
)

logger = daiquiri.getLogger(__name__)
logger.error('loglevel ERROR ...')
logger.info('loglevel INFO ...')
logger.debug('loglevel DEBUG ...')

# --> STDERR:
# --> 2020-12-14 19:45:35,235 [25513] ERROR    __main__: loglevel ERROR ...
# --> 2020-12-14 19:45:35,236 [25513] INFO     __main__: loglevel INFO ...
# --> 2020-12-14 19:45:35,236 [25513] DEBUG    __main__: loglevel DEBUG ...
# --> File:
# --> 2020-12-14 19:45:35,235 [25513] ERROR    __main__: loglevel ERROR ...
In diesem zweiten Beispiel erhalte ich in den Log-Channels unterschiedliche Log-Meldungen ... weiss jemand Rat, wie ich das erste Beispiel konfigurieren muss, damit ich auch da in den verschiedenen Log-Channels unterschiedliche Loglevels verwenden kann?

Besten Dank & bliibed gsund!
Beat

Re: [gelöst] verschiedene Loglevels (daiquiri wrapper)

Verfasst: Dienstag 15. Dezember 2020, 18:43
von cirage
Problem gelöst!

Da ich in diesem Python Forum nichts mit dem Stichwort "daiquiri" gefunden habe, gehe ich davon aus, dass dieses hilfreiche Modul nicht vielen bekannt sein dürfte. Ich habe deshalb direkt den Modulentwickler angeschrieben und postwendend die Lösung erhalten (Anhang folgend).

Besten Dank an Joulien Danjou
(und allen, die ich die Mühe genommen haben, meine Frage zu lesen ...)
Beat

That should work:

Code: Alles auswählen

daiquiri.setup(
    level=logging.DEBUG,
    outputs=(
        daiquiri.output.Stream(level=logging.WARNING),
        daiquiri.output.File(
            filename="gugus_v1.log", directory=".", level=logging.DEBUG
        ),
    ),
)
- `level` set the global debug level to DEBUG
- first output is stderr with level WARNING
- second output is a file with level DEBUG

You can't use STDERR because it's an alias to Stream(level=None) which means the level will be the global one (e.g. DEBUG here). You need specify it too.