Um jeden Preis protokollieren?
@Sophus: daher erzeugt man ja pro Modul einen eigenen Logger, per »getLogger(__name__)«. Und da der Logger ans Modul gebunden ist, braucht man auch nicht überall den Logger als Argument zu übergeben. Das macht das ganze viel übersichtlicher. my_logger und dieser CustomLogger sind auch überflüssig. Wie BlackJack schon geschrieben hat, konfiguriert man die Logger am besten über eine Konfigurationsdatei.
@DasIch: Derzeit konfiguriere ich meinen Logger auch an einer Stelle meines Programmes, und zwar in mein sogenanntes "Main"-Modul. Aber es ist ja möglich, dass man in Modul A den LogLevel DEBUG möchten und in Modul B dann WARNING und in Modul C dann INFO. Oder ist dieser Gedanke sehr unüblich un man behält bei einer Anwendung den einmalig erstellten LogLevel bei?
Deshalb machst du (wie schon öfters angesprochen), einen globalen Logger *pro* Modul, diese Logger kann man dann relativ einfach via Konfigurationsdatei oder in einer main-Methode konfigurieren:Sophus hat geschrieben:Aber es ist ja möglich, dass man in Modul A den LogLevel DEBUG möchten und in Modul B dann WARNING und in Modul C dann INFO. Oder ist dieser Gedanke sehr unüblich un man behält bei einer Anwendung den einmalig erstellten LogLevel bei?
Code: Alles auswählen
logging.getLogger('requests.packages.urllib3.connectionpool').setLevel(logging.WARNING)the more they change the more they stay the same
Um zu sehen, ob ich euch richtig verstanden habe: Zur Simulation habe ich insgesamt vier Module. In einem Modul wird der Logger konfiguriert, in einem anderen tun wir so, als sei das Modul das Hauptprogramm, und die letzten beiden Module tun so, als würden sie etwas tun. Und damit ich den Logger auch tatsächlich in mehreren Modulen benutzen kann, muss ich die basicConfig()- Methode nehmen. Das habe ich In der HOWTo Logging gelesen.
main_script.py (In diesem Beispiel soll dieses Modul als so eine Art Hauptprogramm fungieren.)
managed_logging.py (In diesem Beispiel konfiguriere ich den Logger in ein separates Modul.)
other_mod.py
other_mod_2.py
main_script.py (In diesem Beispiel soll dieses Modul als so eine Art Hauptprogramm fungieren.)
Code: Alles auswählen
import managed_logging
from other_mod import ClassOne
from other_mod_2 import ClassTwo
import logging
def main():
class_one = ClassOne()
class_two = ClassTwo()
class_one.func_foo()
class_two.func_bar()
if __name__ == "__main__":
main()Code: Alles auswählen
import logging
logging.basicConfig(
filename='test_log.log',
level=logging.INFO,
format= '%(asctime)s: '
'%(filename)s: '
'%(funcName)s(): '
'%(lineno)d:\t'
'%(name)s'
'%(levelname)s'
'%(message)s',
datefmt='%Y-%m-%d-%H:%M:%S')Code: Alles auswählen
import logging
logger = logging.getLogger('main_script.other_mod')
logger.setLevel(logging.WARNING)
class ClassOne(object):
def __init__(self):
self.var = None
def func_foo(self):
# You can now start issuing logging statements in your code
logger.debug('debug message') # This won't print to myapp.log
logger.info('info message') # Neither will this.
logger.warn('Checkout this warning.') # This will show up in the log file.
logger.error('An error goes here.') # and so will this.
logger.critical('Something critical happened.') # and this one too.Code: Alles auswählen
import logging
logger = logging.getLogger('main_script.other_mod_2')
logger.setLevel(logging.DEBUG)
class ClassTwo(object):
def __init__(self):
self.var = None
def func_bar(self):
# You can now start issuing logging statements in your code
logger.debug('debug message') # This won't print to myapp.log
logger.info('info message') # Neither will this.
logger.warn('Checkout this warning.') # This will show up in the log file.
logger.error('An error goes here.') # and so will this.
logger.critical('Something critical happened.') # and this one too.-
BlackJack
@Sophus: Du *musst* nicht `basicConfig()` verwenden. Du kannst Dir auch den Root-Logger geben lassen und den konfigurieren, oder die Konfiguration über Konfigurationsdateien erledigen, oder über Wörterbücher um zum Beispiel JSON oder YAML als Konfigurationsformat zu verwenden. Oder irgend etwas anderes was man in ein Wörterbuch umwandeln kann in dem die Konfiguration steht.
Bei `other_mod_2` stimmen die Kommentare nicht, weil für den Logger ja DEBUG als Level gesetzt ist.
Ansonsten sieht das okay aus.
Bei `other_mod_2` stimmen die Kommentare nicht, weil für den Logger ja DEBUG als Level gesetzt ist.
Ansonsten sieht das okay aus.
