2016-06-22 8 views
0

Ich verwende das systemeigene Protokollierungs-Dienstprogramm beim Schreiben eines Python-Pakets. Was ist der beste Ort für die logging.conf?Der beste Speicherort für log.conf in Python-Paket

Ich habe die folgende Paketstruktur

/package 
setup.py 
.gitingore 
.... 
/dist 
    __init__.py 
    dosomething.py 
    /utils 
     /submodule1 
      submodule1.py 
     /logger 
      log.py 
/tests 
    ... 

kann ich die logging.conf in mit dem Logger-Modul oder im Paket root setzen will? Gibt es einen besseren Ort?

Antwort

1

Nicht einfach zu beantworten. Ich poste das, weil es für einen Kommentar viel zu lang ist.

Die Antwort kann vom Rest der Organisation Ihres Pakets abhängen (wie, haben Sie nur diese Conf-Datei, oder einige andere? Kann andere Conf-Datei einen Tag später angezeigt werden?).

Hier ist, wie ich das organisiere. Obwohl ich nicht sagen kann, dass es die beste Organisation ist (ich weiß nicht, ob andere einen besseren Weg als meine haben), passt es meinen Bedürfnissen ziemlich gut, und ich denke, es könnte hilfreich sein, es zu teilen. Ich muss über Ihre Frage hinaus beantworten, wo es setzen? " weil ich mehrere Dateien für die gleichen Einstellungen verwende (aber für verschiedene Zwecke verwendet, siehe unten).

Bis jetzt fand ich es gut, alle verschiedenen conf - Dateien im selben Verzeichnis zu sammeln (dies erlaubt es, eine Variable mit dem Pfad zu allen Einstellungen einzurichten, statt einer Menge Variablen, eine für die Protokollierungseinstellungen, eine für bestimmte Einstellungen des Pakets usw.).

Das gleiche kann nur für eine conf-Datei gelten: Wenn später eine andere conf-Datei benötigt wird, weiß ich, wo ich sie setzen kann und ich kann die Variable verwenden, die bereits den richtigen Pfad enthält.

In Ihrem Beispiel würde ich sie in package/dist/settings/default/ setzen und dort die vollständige Standardkonfiguration hinterlassen, verfolgt von git (oder Ihrem VCS), z.B. ein standardmäßiger funktionierender "Zustand", in dem sich das Paket befinden kann, wenn es in der Produktion verwendet wird. Diese Datei soll nicht vom Benutzer geändert werden. Dann setze ich in package/dist/settings/dev/ die "dev" -Versionen (unverfolgt von git), wo ich die Konfiguration ändern kann, um meine Bedürfnisse während der Entwicklung zu erfüllen, ohne von git jederzeit belästigt zu werden (und die Standardeinstellungen unverändert im Verzeichnis default/ zu behalten). Dies ist besonders nützlich für das Debugging von Einstellungen, da sie sich häufig ändern. (Obwohl sie für die Logging-only-conf-Datei nicht interessant sind, erwähne ich, dass die systemweiten conf-Dateien in /etc/mypackage/ gespeichert werden können und die neu definierten Einstellungen des Benutzers in ~/.config/my_package/ gespeichert werden können).

Beim Laden der Einstellungen lädt mein Paket zunächst die Standardkonfiguration, um sicherzustellen, dass alle Werte definiert sind. Dann prüft es nacheinander, ob es eine Konf-Datei in /etc/mypackage/, dann in ~/.config/my_package/ und schließlich in package/dist/settings/dev/ gibt. Jedes Mal, wenn es einen findet, überschreibt es die (möglicherweise) neu definierten Werte. (Da meine Konfigurationsdateien alle in yaml geschrieben sind, wird jede vorhandene Datei als Wörterbuch geladen und ich habe nur die Standardkonfiguration mit diesen neuen Werten update. Auf diese Weise kann ich nur die Einstellungen ändern, die ich in meiner Entwicklerkonfiguration mag, nicht erwähnen die anderen lassen sie auf ihre Standardwerte setzen).

Eine gute Möglichkeit, mehr zu lernen, ist, bestehende Projekte zu durchsuchen und zu sehen, wie andere dies tun.