###前提・実現したいこと
Python+luigiでバッチ開発を検討しています。
ログ出力の動作を見るため、
下記のようなコードを組み、実行しました。
標準出力とログ出力をペアにしています。
###発生している問題・エラーメッセージ
こちらの意図した通りのログ出力がされず、
原因を調査しているものの、手がかりが見つからない状態です。
###該当のソースコード
base_task.py
# -*- coding: utf-8 -*- import luigi import logging from logging import config class BaseTask(luigi.Task): def __init__(self): super().__init__() logging.config.fileConfig("C:/bin/task/logging.conf")
some_task1.py
# -*- coding: utf-8 -*- import logging import luigi from bin.task import base_task, some_task2 class SomeTask1(base_task.BaseTask): def __init__(self): super().__init__() self.logger = logging.getLogger(self.__class__.__name__) def some_method1(self) -> int: print("hoge3") self.logger.info("hoge3") some_number = 0 return some_number def some_method2(self, some_number: int): print("hoge4") self.logger.info("hoge4") def requires(self): print("hoge1") self.logger.info("hoge1") return [some_task2.SomeTask2()] def run(self): print("hoge2") self.logger.info("hoge2") some_number = self.some_method1() self.some_method2(some_number) # メイン処理 if __name__ == '__main__': luigi.run()
some_task2.py
# -*- coding: utf-8 -*- import logging import luigi from bin.task import base_task class SomeTask2(base_task.BaseTask): def __init__(self): ''' コンストラクタ ''' super().__init__() self.logger = logging.getLogger(self.__class__.__name__) def requires(self): print("fuga1") self.logger.debug("fuga1") return[] def output(self): print("fuga4") self.logger.debug("fuga4") return luigi.LocalTarget("test.txt") def some_method1(self): print("fuga3") self.logger.debug("fuga3") with self.output().open('w') as f: f.write("hogehoge" + "\n") def run(self): print("fuga2") self.logger.debug("fuga2") self.some_method1()
logging.conf
[loggers] keys=root [handlers] keys=fileRotatingHandler [formatters] keys=simpleFormatter [logger_root] level=DEBUG handlers=fileRotatingHandler [handler_fileRotatingHandler] class=logging.handlers.TimedRotatingFileHandler level=DEBUG formatter=simpleFormatter args=('batch2.log', 'D', 1, 30) [formatter_simpleFormatter] format=%(asctime)s - %(threadName)s - %(name)s - %(levelname)s - %(message)s datefmt='%Y/%m/%d %p %I:%M:%S'
###試したこと
SomeTask1 --local-schedulerでタスクを実行しました。
私の予想では、
標準出力、ログとも
hoge1 fuga1 fuga2 fuga3 fuga4 hoge2 hoge3 hoge4
になると予想していたのですが、
実際の出力は、
標準出力:
hoge1 fuga4 fuga1 fuga1 fuga2 fuga3 fuga4 hoge1 fuga4 hoge2 hoge3 hoge4
ログ出力:
'2016/12/27 PM 01:59:44' - MainThread - SomeTask1 - INFO - hoge1 '2016/12/27 PM 01:59:44' - MainThread - SomeTask2 - DEBUG - fuga4 '2016/12/27 PM 01:59:44' - MainThread - SomeTask2 - DEBUG - fuga1 '2016/12/27 PM 01:59:44' - MainThread - SomeTask2 - DEBUG - fuga1 '2016/12/27 PM 01:59:44' - MainThread - SomeTask2 - DEBUG - fuga2 '2016/12/27 PM 01:59:44' - MainThread - SomeTask2 - DEBUG - fuga3 '2016/12/27 PM 01:59:44' - MainThread - SomeTask2 - DEBUG - fuga4 '2016/12/27 PM 01:59:44' - MainThread - SomeTask2 - DEBUG - fuga4
となりました。
予想と実際の出力が異なることは想定内でしたが、
実際の標準出力とログ出力の内容が異なることは想定しておらず、
原因が分からずにいます。
そもそもログが意図した通りに出力できないのはluigiの仕様だったりするのでしょうか。
どなたかluigiに詳しい方、挙動についてご教示いただければ幸いです。
情報の不足等ありましたらお申し付けください。
どうぞよろしくお願いいたします。
###補足情報(言語/FW/ツール等のバージョンなど)
Python3.5.1
luigi2.3.3

バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/03/07 03:01