ich würde gerne für ein Package logging implementieren. Was eigentlich trivial erscheint stellt mich doch vor einige Probleme. Denn wie erstellt man am besten ein flexibles, optionales Loggingsystem für ein Package? Irgendwo muss ja definiert werden, wohin geloggt werden soll, und ob überhaupt. Hat dann jede Klasse ein log-Attribut, jede Funktion einen log-Parameter, der bestimmt, ob geloggt werden soll? Und schreibt man dann an jeder interessanten Stelle (für eine Klasse z.B.):
Code: Alles auswählen
if self.log:
logger.info('Foobar')
Und wie definiert man am besten eine Ausgabequelle für das Logging? Das will man ja eigentlich nur einmal machen müssen. Im __init__.py eine Modulvariable setzen, die dann vom logging ausgewertet wird? Ist das für einen Nutzer eine zumutbare Konfigurationsmöglichkeit?
Code: Alles auswählen
# __init__.py
import sys
log_out = None
Code: Alles auswählen
# Nutzerskript
import package
package.log_out = '/foo/bar'
Solange man seine Packages im Homedir hat, kann man ja einfach loggen, doch sobald man eine systemweite Installation des Packages vorsehen will, muss man doch mehr aufpassen, als ich anfangs gedacht habe. Allein das der logger prozessweit immer derselbe ist, hat mich schon verwirrt, ist das doch erst einmal konträr zu meinen Erfahrungen mit Pythons Modulsystem.Multiple calls to logging.getLogger('someLogger') return a reference to the same logger object. This is true not only within the same module, but also across modules as long as it is in the same Python interpreter process.
Mir ist klar, dass es da kein allgemeingültiges Rezept gibt, aber zumindest einige Ansätze muss es doch geben. Ich glaube, mein größtes Problem ist die Package-weite Konfiguration der Ausgabequelle - da habe ich irgendwie überhaupt keinen Ansatz zu.