質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

1回答

4091閲覧

Python+Luigiでのログ出力について教えて下さい。

act_ueda

総合スコア10

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

1クリップ

投稿2016/12/27 05:30

###前提・実現したいこと
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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

一部です。

ログの出力に関しては、logging側の動作の仕様です。

詳細は、下記のURLを参照ください。

https://docs.python.jp/3/howto/logging.html

投稿2017/03/04 11:15

nagaetty

総合スコア1106

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

act_ueda

2017/03/07 03:01

ご回答ありがとうございます。 同じようなコードを書いていても 場所によってログが出力されたり されなかったりというのが 釈然としていないです。 このあたり、Luigiの挙動の影響を受けているのではないかと 考えています。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問