Modul logging macht nicht das was ich will :(

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
sedi
User
Beiträge: 104
Registriert: Sonntag 9. Dezember 2007, 19:22

Hallo zusammen,

sitze hier schon seit Stunden und komm' nicht auf die Lösung.

Folgender Code erstellt nicht die Datei die in prefs.LOGFILE festgelegte Datei.
Auch gibt der nachfolgende Code nichts auf der Konsole aus aus? Wieso

Code: Alles auswählen

def setuplog():
    logging.basicConfig( 
        filename=prefs.LOGFILE, 
        level=prefs.VERBOSITY, 
        format = "%(asctime)s [%(levelname)-8s] %(message)s") 
    logging.debug("logging system installed [level=%s]" % (prefs.VERBOSITY))


def main():
    setuplog()
Hier die wesentlichen Daten aus der prefs.py:

Code: Alles auswählen

import logging 
VERBOSITY = logging.DEBUG
LOGFILE = "system.log"
CU sedi
----------------------------------------------------------
Python 3.5; Python 3.6
LinuxMint18
BlackJack

@sedi: Der Code macht gar nichts weil `main()` nicht aufgerufen wird. Und würdedie Funktion aufgerufen gäbe es einen `NameError` weil `prefs` nicht importiert wird. `logging` im übrigen auch nicht.
sedi
User
Beiträge: 104
Registriert: Sonntag 9. Dezember 2007, 19:22

Hi @BlackJack:

Tschuldige, habe vom Modul

Code: Alles auswählen

program.py
nur die relevanten Teile angegeben. Es ist relativ umfangreich und ich habe mich daher auf die entscheidenden Stellen beschränkt.

Ich rufe das Modul übrigens über

Code: Alles auswählen

python program.py 
auf!

Ich hänge jetzt noch mal die beiden betreffenden Module mit den entscheidenden Stellen an:

Code: Alles auswählen

import logging
import prefs

# and many further imports

def setuplog():
    logging.basicConfig(
        filename=prefs.LOGFILE,
        level=prefs.VERBOSITY,
        format = "%(asctime)s [%(levelname)-8s] %(message)s")
    logging.debug("logging system installed [level=%s]" % (prefs.VERBOSITY))


def main():
    setuplog()
    ...
    return 0


if __name__ == "__main__":
    return main()
Und der relevante Code aus der 'prefs':

Code: Alles auswählen

import logging
VERBOSITY = logging.DEBUG
LOGFILE = "system.log"
CU sedi
----------------------------------------------------------
Python 3.5; Python 3.6
LinuxMint18
BlackJack

@sedi: Woher weisst Du dass das der entscheidende Teil ist? Wenn man die beiden Fehler ausbessert, die ... und das ``return`` auf Modulebene, dann läuft der Code nämlich und erstellt eine `system.log`-Datei mit dem Inhalt den man erwarten würde. Wenn Du weiteren Quelltext zeigst, wäre es nett wenn Du ihn ausprobierst. Wenn er nicht läuft oder gar kein Problemverhalten zeigt, kann man auch schlecht sagen wo ein Fehler ist. Das geht dann nur mit raten.
sedi
User
Beiträge: 104
Registriert: Sonntag 9. Dezember 2007, 19:22

Hi @BlackJack:

ich habe den Fehler gefunden, auch dank Deiner Dir eigenwilligen Art der Hilfestellung:
BlackJack hat geschrieben:Wenn man die beiden Fehler ausbessert, die ... und das ``return`` auf Modulebene, dann läuft der Code nämlich und erstellt eine `system.log`-Datei mit dem Inhalt den man erwarten würde..
Du hattest recht, der relevante Teil hat gefehlt. Ich habe ein anderes Modul mittels

Code: Alles auswählen

from Package import *
eingebunden, was eine Namenskollision verursachte. Nach der Ausbesserung hats geklappt - Mann, das hat mich Stunden gekostet. Also noch mal Danke für Deine Hilfe!
Nur aus Interesse: Welche zwei Fehler hast Du denn gemeint? :wink: Ich rate mal: In folgender Zeile fehlt in der Klammer bei

Code: Alles auswählen

 (prefs.VERBOSITY)
das Komma, somit verbessert:

Code: Alles auswählen

logging.debug("logging system installed [level=%s]" % (prefs.VERBOSITY,))
Und natürlich das

Code: Alles auswählen

if __name__ == "__main__":
    return main()

Sollte man in sys.exit() umwandeln denke ich...
CU sedi
----------------------------------------------------------
Python 3.5; Python 3.6
LinuxMint18
lunar

@sedi Warum genau ist BlackJacks Art „eigenwillig“?
sedi
User
Beiträge: 104
Registriert: Sonntag 9. Dezember 2007, 19:22

@lunar: Hi - tja wegen der Zeile
Wenn man die beiden Fehler ausbessert, die ... und das ``return`` auf Modulebene, dann läuft der Code nämlich und erstellt eine `system.log`-Datei mit dem Inhalt den man erwarten würde..
Ich habe das nicht böse gemeint. "Eigenwillig" fand ich am passendsten, da die drei Punkte doch wohl für etwas stehen was auszubessern gewesen wäre. Er hat es aber nicht verraten - ein kleines Rätsel anstatt eines Hinweises - fand ich eben eigenwillig - war aber sehr hilfreich. Habe aus genau dem Grund noch mal nachgefragt, was er gesehen hat

Also nichts für ungut
CU sedi
----------------------------------------------------------
Python 3.5; Python 3.6
LinuxMint18
BlackJack

@sedi: Die drei Punkte standen für genau drei Punkte und für nichts anderes. Bei Dir im Quelltext standen sie höchstwahrscheinlich für ausgelassenen Python-Code, aber sie sind nun mal keine gültige Python-Syntax. ;-) Also muss man sie entweder weglassen oder als Kommentar setzen, damit Dein Quelltext lauffähig wird.
sedi
User
Beiträge: 104
Registriert: Sonntag 9. Dezember 2007, 19:22

@BlackJack: Dann war das ein Missverständnis meinerseits - war nicht böse gemeint - hat mir ja geholfen das Problem zu lösen.
CU sedi
----------------------------------------------------------
Python 3.5; Python 3.6
LinuxMint18
Antworten