多数のシミュレーションを実行する必要があるアプリケーションがあります。すべてのログレコードがgeneral.logに記録され、シミュレーション実行のすべてのログがrun00001.logに移動するログメカニズムを設定したいと思います。このために、クラスRunを定義しました。で、__init__()
新しいファイルハンドルがrunlogに追加されます。
問題は、実行のログファイルが解放されないため、何度も実行した後、使用可能なハンドルが使い果たされ、実行がクラッシュすることです。
私はこれをテストするためにいくつかのルーチンを次のように設定しました
メインルーチン
import Model
try:
myrun = Model.Run('20130315150340_run_49295')
ha = raw_input('enter')
myrun.log.info("some info")
except:
traceback.print_exc(file=sys.stdout)
ha = raw_input('enter3')
Runクラスは、モジュールModelで次のように定義されています。
import logging
class Run(object):
""" Implements the functionality of a single run. """
def __init__(self, runid):
self.logdir="."
self.runid = runid
self.logFile = os.path.join(self.logdir , self.runid + '.log')
self.log = logging.getLogger('Run'+self.runid)
myformatter = logging.Formatter('%(asctime)s %(name)-12s %(levelname)-8s %(message)s')
myhandler = logging.FileHandler(self.logFile)
myhandler.setLevel(logging.INFO)
myhandler.setFormatter(myformatter)
self.log.addHandler(myhandler)
次に、プログラムプロセスエクスプローラーを使用してファイルハンドラーを追跡します。そして、runlogが表示されますが、消えることはありません。
これを強制する方法はありますか?