Seite 1 von 1

problem mit logger

Verfasst: Donnerstag 14. Januar 2010, 18:47
von damiro
Hallo,

ich habe ein Problem mit dem logging Modul in der standard library.

Dies ist mein Python:
Python 2.5.4 (r254:67916, Dec 23 2008, 15:10:54) [MSC v.1310 32 bit (Intel)] on win32

Ich benutze folgenden Code:

Code: Alles auswählen

import logging
logging.basicConfig(level=logging.INFO,
                    format=logging.Formatter('%(asctime)s %(name)-12s %(levelname)-8s %(message)s'),
                    datefmt='%Y-%m-%d %H:%M',
                    stream=sys.stdout)
wenn ich jetzt meinen logger benutzen will, sieht das so aus:

Code: Alles auswählen

logging.info("Blah blah blah")
und führt zu folgendem Ergebnis:

Code: Alles auswählen

Traceback (most recent call last):
  File "C:\Programme\Python25\lib\logging\__init__.py", line 744, in emit
    msg = self.format(record)
  File "C:\Programme\Python25\lib\logging\__init__.py", line 630, in format
    return fmt.format(record)
  File "C:\Programme\Python25\lib\logging\__init__.py", line 419, in format
    if string.find(self._fmt,"%(asctime)") >= 0:
  File "C:\Programme\Python25\lib\string.py", line 359, in find
    return s.find(*args)
AttributeError: Formatter instance has no attribute 'find'
Ich wäre dankbar, wenn mir jemand dieses Phänomen erklären könnte. Ich verstehe nicht, was an meinem Code nicht in Ordnung sein könnte.

Danke und Viele Grüße
Daniel

Verfasst: Donnerstag 14. Januar 2010, 19:05
von BlackJack
@damiro: Es wird versucht auf einem `Formatter`-Exemplar die `find()`-Methode aufzurufen -- sagt die Fehlermeldung. So eine Methode haben `Formatter` nicht. Zeichenketten haben die. Wenn Du jetzt noch schaust wo *Du* einen `Formatter` erstellst, und dann in die Doku schaust was an der Stelle eigentlich stehen müsste, sollte der Fehler eigentlich klar sein. :-)

Verfasst: Freitag 15. Januar 2010, 09:58
von damiro
Danke, ich hab's gefunden.

Das Problem war, dass logging.basicConfig() bei dem 'format' Parameter einen einfachen String bekommt und keine logging.Formatter() Instanz.