Ich habe eine Klasse Job
genannt, die einen LoggerProtokollierung für mehrere Objekte: IOError
class MyFileHandler(logging.FileHandler):
def __init__(self, filename):
self.filename = filename
super(MyFileHandler, self).__init__(filename)
def emit(self, record):
log_text = self.format(record)
try:
fh = open(self.filename, "a")
fh.write("%s\n" % log_text)
fh.close()
return True
except:
return False
log_formatter = logging.Formatter('br: %(message)s')
class Job(object):
def __init__(self, name):
self.name = name
self.logger = logging.getLogger(self.name)
log_hdlr = MyFileHandler('/tmp/%s' % name)
log_hdlr.setFormatter(log_formatter)
self.logger.addHandler(log_hdlr)
self.logger.setLevel(logging.INFO)
jobs = []
for i in range(100):
j = Job(str(i))
job.append(j)
und Jobs aus über job.logger.info()
etwas tun und Protokolle gehen muss, aber wenn ich mehrere Jobs haben Tausende dh, es ist werfen Fehler
IOError: [Errno 24]
Too many open files:
'/x/prototype_3885946_1608131132/cm/cm_conv/logs/20160827-195925.log'
dachte ich jedes Mal, wenn ich etwas angemeldet, würde es öffnen sie dann die Datei schließen, wie ichüberschrieben
Gibt es ein Muster/Möglichkeiten, Tausende von Loggern zu haben?
@martineau ja, obv das ist nicht der springende Punkt aber genug, um über das Problem zu kommen im Versuch, hightlight ... – ealeon
fyi log_formatter ist direkt über Klasse Job. Das einzige, was für self.log verwendet wird, ist self.log.file, was nur der Pfad zur Logdatei ist. – ealeon
gemacht eine Änderung .. und es sollte Ihre Bedenken adressieren @martineau – ealeon