私はロガーログ:例外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)
と仕事を持っているJob
と呼ばれるクラスが消灯しているがjob.logger.info()
を通じて何かとログを行うが、私は複数のジョブが何千、すなわち持っているとき、それはです私はを上書きしてきたように、エラー
IOError: [Errno 24]
Too many open files:
'/x/prototype_3885946_1608131132/cm/cm_conv/logs/20160827-195925.log'
を投げ、私は、私は、それはファイルを閉じ開くと何かをログに記録するたびに考えました
何千ものロガーがあるパターン/方法はありますか?
@martineauはい、obvは全体の点ではありませんが、問題を克服するのに十分です.highlightしようとしています... – ealeon
fyi log_formatterはクラスJobの直上です。 self.logに使われているのは、ログファイルのパスであるself.log.fileだけです。 – ealeon
は1つの変更を加えました。あなたの懸念に対応する必要があります@martineau – ealeon