Comment extraire les processus,thread name,levelname personnalisé python enregistreur
Je suis en train d'élaborer personnalisé enregistreur de programme,ainsi que le demande j'ai besoin de récupérer le processus,le fil et le nom de l'objet à l'Intérieur de la fonction appelée(Dans l'exemple ci-dessous ses obj doit chercher à l'intérieur de la get_configured_logger fonction) et le nom de la classe à laquelle obj appartient. comme le montre avec des commentaires dans le code ci-dessous, veuillez donner quelques idées pour y parvenir.
import logging, logging.handlers
from logging import StreamHandler, Formatter
class A:
def get_configured_logger(self,name):
logger = logging.getLogger(name)
if (len(logger.handlers) == 0):
FORMAT = "%(process)s %(thread)s:-(asctime)s - %(name)s - %(levelname)s - %(message)-%(module)"
#print 'process:',process
#print 'thread:',thread
#print 'levelname:',levelname
#print 'Module:',(name portion of filename).
#print 'obj:,'name of the object(Eg:obj),current function( Eg: get_configured_logger) called by'
#print 'class name:(obj is instance of class)'
formatter = logging.Formatter(fmt=FORMAT)
handler = logging.StreamHandler()
handler.setFormatter(formatter)
logger.addHandler(handler)
logger.setLevel(logging.DEBUG)
return logger
if __name__=="__main__":
obj=A()
logger = obj.get_configured_logger("DEMO")
logger.debug("TEST")
Grâce
hema
OriginalL'auteur user1559873 | 2012-10-20
Vous devez vous connecter pour publier un commentaire.
Pour ajouter des processus en cours/nom du thread pour un message de log, vous pouvez spécifier dans la chaîne de format:
À obtenir d'eux, comme des chaînes de caractères:
ident
attribut, pour obtenir le fil de l'identifiant. Pour le processus en cours j'ai l'habitude d'utiliseros.getpid()
OriginalL'auteur jfs
Nom du Thread
La la documentation décrit une interface facile d'accéder à la
Thread
, vous pouvez alors utiliser saname
attribut d'avoir le nom du Thread.Vous pouvez ensuite utiliser:
Être conscient que ce n'est pas unique.
Nom du processus
Il n'est pas facile d'obtenir le nom du processus que cela dépend de l'OS que vous utilisez. Vous pouvez toutefois obtenir l'ID de processus (
pid
):Qui est, sauf si vous utilisez la
multiprocessing
module et de le lancer sous-processus, dans ce cas vous pouvez utiliser lemultiprocessing
module qui présente une interface très semblables à celle de laThreading
module.OriginalL'auteur Thomas Orozco