Seite 1 von 1

"logging" für Anwenderinfos und Fehlermeldungen

Verfasst: Montag 11. September 2017, 14:55
von Kniffte
Hallo Zusammen,

Ich habe in meine Anwendung ein globales Logging eingefügt. Die Logging-Nachrichten werden zum einen an einen "logging.Streamhandler" zum anderen an einen "logging.FileHandler" übergeben.
Der Streamhandler fügt die Loggings gefiltert in ein Text-Widget der GUI (Tkinter) ein. Diese dienen der Information des Users und sagen ihm was gerade im Detail berechnet/ersetzt/geändert wurde.
Der Filehandler schreibt alle (ungefiltert) Logging-Nachrichten in eine Logging-Datei im Userverzeichnis. (Sowohl die Infos an den User als auch Debug- oder Fehlermeldungen) Dies soll mir dabei helfen auftretende Probleme besser nachvollziehen zu können, um die Anwendung später zu optimieren.
Der Logger steht momentan auf Modulebene im Controller:

Code: Alles auswählen

import logging
import os

application_logger = logging.getLogger('statuslogger')
application_logger.setLevel(logging.DEBUG)

log_formatter = logging.Formatter(fmt='%(asctime)s [%(levelname)-7s] in %(module)s.%(funcName)s@line:%(lineno)d --> %(message)s',
                                  datefmt='%Y-%m-%d %H:%M:%S')

console_handler = logging.StreamHandler()
console_handler.setLevel(logging.DEBUG)
console_handler.setFormatter(log_formatter)

home_dir = os.path.expanduser('~')
app_folder = os.path.join(home_dir, 'Prepro')
try:
    os.mkdir(app_folder)
except FileExistsError:
    print('folder already exists') # edit exception handling later
filename = os.path.join(app_folder, 'prepro.log')

file_handler = logging.FileHandler(filename)
file_handler.setLevel(logging.DEBUG)
file_handler.setFormatter(log_formatter)

application_logger.addHandler(console_handler)
application_logger.addHandler(file_handler)
und in jedem Modul, in dem ich das logging benötige wird wiederum auf Modulebene eine Referenz zum logger definiert.
(z.b. im View)

Code: Alles auswählen

application_logger = logging.getLogger('statuslogger')
# ...
Könnte man hier grundsätzlich was verbessern bzw. spricht was gegen diese Art der Verwendung eines loggers?
Was mir persönlich noch nicht gefällt, ist der umfangreiche Code auf Modulebene in der controller.py.

Gruß Seb

Re: "logging" für Anwenderinfos und Fehlermeldungen

Verfasst: Montag 11. September 2017, 18:41
von Sirius3
@Kniffte: zum Konfigurieren des Loggers braucht man halt einiges an Code. Alternativ könntest Du auch eine ini-Datei verwenden.

Re: "logging" für Anwenderinfos und Fehlermeldungen

Verfasst: Dienstag 12. September 2017, 07:53
von Kniffte
@Sirius3:
Ok...eine ini-Datei wäre eine Möglichkeit, aber im Prinzip würde ich so auch nur Teile des Programms verschieben/ auslagern.
Grundsätzlich würde mir die Verwendung einer .ini-Datei zur Konfiguration des Loggers oder das Umschreiben der Loggerkonfiguration als Funktion (oder Klasse) erstmal keine Vor- oder Nachteile bringen?
Ich habe halt im Hinterkopf, wie es hier gern betont wird, dass auf Modulebene möglichst nur Konstanten, Importe, Funktionen & Klassen was zu suchen haben und ich hier in meinem Codebsp. diesbzgl. was ändern sollte?

Re: "logging" für Anwenderinfos und Fehlermeldungen

Verfasst: Dienstag 12. September 2017, 08:09
von Sirius3
@Kniffte: ach darum geht's. Die Konfiguration des Loggers solltest Du in eine Funktion schreiben und irgendwann am Anfang des Hauptprogramms aufrufen.

Re: "logging" für Anwenderinfos und Fehlermeldungen

Verfasst: Dienstag 12. September 2017, 09:33
von Kniffte
@Sirius3:
:) Danke...hatte ich fast schon vermutet.