2017-09-01 4 views
0

Gibt es trotzdem mehrere Protokollwerte im Formatter zusammen zu kombinieren, so dass sie als ein einzelnes Element aufgefüllt werden können?Mehrere Felder zusammen in Python Logger packen

Mein Protokollformatierer sieht wie folgt aus:

'%(asctime)s %(module)s:%(funcName)s:%(lineno)-15d %(levelname)-8s %(name)s: %(message)s' 

ich es Pad das Modul haben möchten, funcName und lineno Felder zusammen. Mit diesem Formatierer Laufe erzeugt diese Ausgabe:

2017-09-01 21:06:29,299 app:main:48    INFO  pub: main start 
2017-09-01 21:06:29,434 app:push_data:36    INFO  pub: push data 

Aber ich will es wie sein:

2017-09-01 21:06:29,299 app:main:48   INFO  pub: main start 
2017-09-01 21:06:29,434 app:push_data:36  INFO  pub: push data 

Antwort

0

hatte ich ein ähnliches Problem vor kurzem und löste es durch einen benutzerdefinierten logging.Formatter machen.

In Ihrer INI-Datei, fügen Sie die folgende Zeile unter dem Formatierungsblock:

class=my_log_formatter.MyLogFormatter 

Auch sollten Sie die Zeile entfernen, die mit format= beginnt, wenn es vorhanden ist. Es wird wie folgt aussehen:

format=%(asctime)s %(name)-40s:%(lineno)-4s %(levelname)-8s %(message)s 

Dann eine neue Klasse machen:

import logging 
class MyLogFormatter(logging.Formatter): 
    def format(self, record): 
     location = '%s.%s:%s' % (record.name, record.funcName, record.lineno) 
     msg = '%s %-60s %-8s %s' % (self.formatTime(record), location, record.levelname, record.msg) 
     record.msg = msg 
     return super(MyLogFormatter, self).format(record)