Kurz gesagt: Hören wir auf
Bitte lesen Sie das Folgende als Geschichte.
log4j (http://ja.wikipedia.org/wiki/Log4j) hat eine Ebene namens TRACE unter DEBUG. Ich denke, das ist eine sehr Ameisenfunktion.
Zum Beispiel am Anfang und am Ende einer Funktion "gestartet!" Und "beendet!"
Wenn Sie auf der TRACE-Protokollebene oder `` LOG.trace ()
`usw. schreiben und den Prozess mit DEBUG in die Mitte schreiben,
Es ist, als könnte man mehrere Stufen wie -vv (im Fall von ssh) für -v auf einer etwas aussagekräftigeren Ebene definieren.
Wenn ein Käfer kommt, ist Gras unvermeidlich.
Während der Entwicklung kann es hilfreich sein, auf Protokollebene zu wissen, "welche Funktion bis zum Ende funktioniert hat". Es ist nicht immer möglich, den Debugger in der gesamten Story auszuführen, und irgendwie verwende ich "printf debug". Hilfe.
Python-Protokollstufen sind in erster Linie numerisch, und DEBUG, INFO usw. werden tatsächlich numerischen Werten zugeordnet.
https://docs.python.org/3.4/library/logging.html#logging-levels
Wenn Sie beispielsweise ein Protokoll ausspucken, schreiben Sie wie folgt
logging.debug ('sollte nicht so geschrieben werden') logging.log (logging.DEBUG, 'Also!')
(Eigentlich können Sie Logger verwenden)
Da logging.DEBUG einfach 10 ist, repräsentiert die obige Notation effektiv die Ausgabe auf derselben Protokollstufe wie die folgende Notation.
logging.log (10, 'Nmo!')
NOTSET (0) ist etwas Besonderes. Lassen wir es also beiseite, und selbst wenn Sie Zahlen von 1 bis 9 verwenden, wird sich die Protokollfunktion nicht beschweren. Im Gegenteil, DEBUG und INFO werden einfach als Aliase für Zahlen behandelt.
`logging.log (lvl, msg)`
lvl ist eine Zahl und akzeptiert nicht 'DEBUG' usw. )Wenn Sie also eine Zahl wie 5 angeben und `` logging.log (5, 'wafu')
usw. schreiben, können Sie
setLevel (logging.DEBUG)
`state logger schreiben. Wird nicht angezeigt.
Wenn Sie so etwas wie TRACE ausführen, indem Sie numerische Werte angeben, sieht es wie folgt aus.
from logging import getLogger, StreamHandler, DEBUG
logger = getLogger(__name__)
handler = StreamHandler()
logger.setLevel(DEBUG)
handler.setLevel(DEBUG)
logger.addHandler(handler)
logger.log (5, 'Ich fange an') .. logger.debug ('Das ist groß') .. logger.log (5, 'Es ist vorbei')
Im obigen Beispiel werden "Start" und "Ende" nicht angezeigt. Es ist nur "Das ist groß". Ein Weg, um Debug-Protokolle zu erhalten, die wirklich nur für Entwickler wertvoll sind Persönlich finde ich es nicht schrecklich. Oder eher bequem.
Hier hat die Protokollierung eine Funktion namens `addLevelName ()`
.
(https://docs.python.org/3.4/library/logging.html#logging.addLevelName)
Oh, das ist `logger.trace ()`
Nicht gemacht :-)
logging.trace()Und Logger.trace()Wird nicht gemacht, geschweige denn protokolliert.log('TRACE', 'Hallo')Ich kann es nicht machen An erster Stelle anmelden.log('INFO', 'Lassen Sie uns einfügen')Nicht einmal erlaubt.
# Sie können so etwas wie `` `logger.setLevel ('INFO')` `` angeben (um genau zu sein, es scheint nur die neueste Version nach 3.2 zu sein. Aus irgendeinem Grund enthält es auch 2.7). Es ist auch möglich, `` --log = DEBUG``` mit argparse anzugeben und direkt in `` `setLevel ()` `einzufügen.
Wahrscheinlich ist dies nur eine Funktion, bei der `` `Formatter```" TRACE "anstelle von" Level 5 "anzeigt, nicht wahr?
(wie Ipython)
> import logging
> logger = logging.getLogger('test')
> logger.setLevel(1)
> handler = logging.StreamHandler()
> handler.setLevel(1)
> formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
> handler.setFormatter(formatter)
> logger.addHandler(handler)
> logger.debug('hello')
2014-05-01 11:02:12,743 - DEBUG - hello
> logger.log(5, 'hoge')
2014-05-01 11:02:20,599 - Level 5 - hoge
> logging.addLevelName(5, 'TRACE')
> logger.log(5, 'hoge')
2014-05-01 11:02:43,173 - TRACE - hoge
Um genau zu sein, wenn Sie mit dem Inhalt der Murikuri-Protokollierung herumspielen, können Sie möglicherweise `` `logging.trace ()` `` usw. hinzufügen. Es ist Python.
Es existiert jedoch standardmäßig nicht als nette und sichere Implementierung, und ich denke nicht, dass es in Zukunft in diese Richtung geht.
Selbst wenn ich es könnte, kann ich sehen, dass es einfach super lästig ist.
Es kann nicht gesagt werden, dass der von jeder Funktion oder dergleichen empfangene Logger es immer hat. Insbesondere wenn es als Bibliothek bereitgestellt wird, ist es sichtbar, dass Logger, die Trace nicht kennen, von außen kommen.
Manchmal habe ich eine Spur oder nicht, also frage ich mich, ob ich sie beim Überprüfen mit getattr verwende.
Bequemlichkeit ist nicht in Ordnung.
# Erstens sagt der Beamte so etwas wie "Tu es nicht".
https://docs.python.org/2/howto/logging.html#custom-levels
> Defining your own levels is possible, but should not be necessary, as the existing levels have been chosen on the basis of practical experience. However, if you are convinced that you need custom levels, great care should be exercised when doing this, and it is possibly a very bad idea to define custom levels if you are developing a library. That’s because if multiple library authors all define their own custom levels, there is a chance that the logging output from such multiple libraries used together will be difficult for the using developer to control and/or interpret, because a given numeric value might mean different things for different libraries.
https://docs.python.org/3.2/howto/logging.html#custom-levels
> Defining your own levels is possible, but should not be necessary, as the existing levels have been chosen on the basis of practical experience. However, if you are convinced that you need custom levels, great care should be exercised when doing this, and it is possibly a very bad idea to define custom levels if you are developing a library. That’s because if multiple library authors all define their own custom levels, there is a chance that the logging output from such multiple libraries used together will be difficult for the using developer to control and/or interpret, because a given numeric value might mean different things for different libraries.
https://docs.python.org/3.4/howto/logging.html#custom-levels
> Defining your own levels is possible, but should not be necessary, as the existing levels have been chosen on the basis of practical experience. However, if you are convinced that you need custom levels, great care should be exercised when doing this, and it is possibly a very bad idea to define custom levels if you are developing a library. That’s because if multiple library authors all define their own custom levels, there is a chance that the logging output from such multiple libraries used together will be difficult for the using developer to control and/or interpret, because a given numeric value might mean different things for different libraries.
# Fazit
Lass uns anhalten
Wenn Sie es verwenden, bereiten Sie einen bestimmten Handler vor, der ein sehr ausführliches Protokoll als "Debug" -Protokoll für einen Fehler ausspuckt, den der Entwickler nicht verstehen kann. Setzen Sie nur diesen Handler auf Protokollstufe 1, und die anderen sind mit DEBUG matschig. Reicht es aus, mit solchen mehreren Schritten umzugehen?
Ganz am Ende meines Bestehens auf "Lass uns aufhören" war ich überzeugt, dass "Oh, dann kann ich nicht vergeben", und das war's.
Recommended Posts