"logging" für Anwenderinfos und Fehlermeldungen
Verfasst: Montag 11. September 2017, 14:55
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:
und in jedem Modul, in dem ich das logging benötige wird wiederum auf Modulebene eine Referenz zum logger definiert.
(z.b. im View)
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
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)
(z.b. im View)
Code: Alles auswählen
application_logger = logging.getLogger('statuslogger')
# ...
Was mir persönlich noch nicht gefällt, ist der umfangreiche Code auf Modulebene in der controller.py.
Gruß Seb