2017-03-21 2 views
0

Der Logging-Code wie folgt sendet alle Log-Informationen an einen Remote-Server, und drucken Sie sie in Ihrem Terminal aus. Die Frage hier ist, wie man eine globale Konfiguration wie "basicConfig" macht, um den Code in jedem Logger zu vereinfachen.gibt es eine bessere Lösung, um eine globale Konfiguration für exc_info und zusätzliche Protokollierung zu erstellen

logger.error("Hey log it's an error", exc_info=True, extra=d) 

Zum Beispiel möchte ich über den Code zu vereinfachen, um zu logger.error ("Hey log es ist ein Fehler") mit einer Standardkonfiguration von "exc_info = True, extra = d".

import logging 
import threading 
import time 
import logging.handlers 

logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(pathname)s - %(filename)s - %(module)s - %(lineno)d - %(process)d - (%(threadName)-10s) - %(levelname)s - %(message)s',) 
logger = logging.getLogger(__name__) 
http_handler = logging.handlers.HTTPHandler(
    'ip:port', 
    '/log', 
    method='POST', 
) 
logger.addHandler(http_handler) 

d = {'clientip': "your ip", 'user': 'logging_test'} 

class ThreadUrl(threading.Thread): 
    def run(self): 
     logger.debug("Hey log it's a debug", extra=d) 
     try: 
      open('testfile') 
     except Exception, e: 
      logger.error("Hey log it's an error", exc_info=True, extra=d) 


for i in range(10): 
    t = ThreadUrl() 
    t.start() 
    time.sleep(1) 

Das Beispielergebnis in MongoDB.

{ 
    "_id" : ObjectId("58d1326215109901ce525da4"), 
    "relativeCreated" : "9132.83205032", 
    "process" : "57540", 
    "CreateDate" : ISODate("2017-03-21T04:51:24.065+08:00"), 
    "args" : "()", 
    "module" : "Logging_inspect", 
    "funcName" : "run", 
    "user" : "logging_test", 
    "exc_text" : "None", 
    "clientip" : "your ip", 
    "name" : "__main__", 
    "thread" : "123145406930944", 
    "created" : "1490076138.79", 
    "threadName" : "Thread-10", 
    "msecs" : "790.709972382", 
    "filename" : "Logging_inspect.py", 
    "levelno" : "40", 
    "processName" : "MainProcess", 
    "pathname" : "/Users/user/Desktop/Test/Test/Logging_inspect.py", 
    "lineno" : "25", 
    "msg" : "Hey log it's an error", 
    "exc_info" : "(<type 'exceptions.IOError'>, IOError(2, 'No such file or directory'), <traceback object at 0x10419c248>)", 
    "levelname" : "ERROR" 
} 
+0

Warum müssen Sie nicht mit einer Basisklasse von 'Logger' eine Ihre eigenen Logger-Klasse erstellen und dann die Methoden nach Bedarf –

+0

außer Kraft setzen @saurabhbaid Sie hat Recht, aber ich fühle mich verwirrend, wie die Methoden zu überschreiben. Kannst du mir mehr Hinweise geben? Vielen Dank! –

+0

Little google kann Ihnen viele Tutotials darauf geben wie unten http://blog.thedigitalcatonline.com/blog/2014/05/19/method-overriding-in-python/#.WNDKdFWGOpo –

Antwort

0

LoggerAdapter könnte es leicht lösen.

d = {'clientip': "your ip", 'user': 'logging_test'} 
logger = logging.LoggerAdapter(logger, d) 
Verwandte Themen