私のコードでは、どういうわけかロガーはイベントを 2 回出力しますが、従来の方法print
では正しい数のイベントが表示されます。
select 1,2
select 1,2
2013-04-19 18:37:30,618:4561354752 - SQLLogger - DEBUG - select 1,2
2013-04-19 18:37:30,618:4561354752 - SQLLogger - DEBUG - select 1,2
2013-04-19 18:37:30,618:4565561344 - SQLLogger - DEBUG - select 1,2
2013-04-19 18:37:30,618:4565561344 - SQLLogger - DEBUG - select 1,2
マルチスレッドの状況で同じメッセージが複数回発行される理由は私には明らかではありません。
import logging
from threading import Thread
class SQLEngine(object):
def __init__(self, DB_PATH):
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)
formatter = logging.Formatter('%(asctime)s:%(thread)d - %(name)s - %(levelname)s - %(message)s')
ch.setFormatter(formatter)
self.logger = logging.getLogger('SQLLogger')
self.logger.setLevel(logging.DEBUG)
self.logger.addHandler(ch)
def execute(self,SQL,):
self.logger.debug(SQL)
print SQL
class DBWorker(Thread):
def __init__(self, name):
Thread.__init__(self)
self.name = name
def run(self):
db = SQLEngine('')
db.execute('select 1,2')
if __name__ == '__main__':
DBWorker('thread 1').start()
DBWorker('thread 2').start()