2: 2016-12-14 (水) 06:15:56 njf[6] [7] [8] | 現: 2017-01-01 (日) 15:15:28 njf[6] [9] [10] | ||
---|---|---|---|
Line 8: | Line 8: | ||
**基本的な出力 [#r7dfa599] | **基本的な出力 [#r7dfa599] | ||
- | loggingでの簡単な例は以下の通りです。 | + | loggingでの簡単な例は以下の通りです。以下の例では「test.log」というファイルに二つのメッセージを出力しています。 |
import logging | import logging | ||
+ | |||
logging.basicConfig(filename='test.log',level=logging.DEBUG) | logging.basicConfig(filename='test.log',level=logging.DEBUG) | ||
+ | |||
logging.warning('warning test') | logging.warning('warning test') | ||
logging.info('info test') | logging.info('info test') | ||
Line 29: | Line 29: | ||
|ERROR|error|一部の機能が実行できないようなエラー| | |ERROR|error|一部の機能が実行できないようなエラー| | ||
|CRITICAL|critical|プログラム自体が実行できない重大なエラー| | |CRITICAL|critical|プログラム自体が実行できない重大なエラー| | ||
+ | |||
+ | 表の下に行くほど重要なログで、出力されやすくなります。 | ||
例えばログのレベルをINFOにしていると、DEBUGレベルであるdebugメソッドのログは出力されず、残りのinfo、worning,error、criticalが出力されます。 | 例えばログのレベルをINFOにしていると、DEBUGレベルであるdebugメソッドのログは出力されず、残りのinfo、worning,error、criticalが出力されます。 | ||
Line 53: | Line 55: | ||
実際に使う時には日付と時間がないと、実用にはならないでしょう。 | 実際に使う時には日付と時間がないと、実用にはならないでしょう。 | ||
+ | 普段運用しているシステムならもちろん、開発中でもデバッグがうまくいかないと思っていたら、実は古いログを見ていたというのは「開発者あるある」の一つです。日付と時間はなるべく早い段階で入れるのがおすすめです。 | ||
+ | |||
「日付:メッセージ」とするには「logging.basicConfig」にformatを指定します。 | 「日付:メッセージ」とするには「logging.basicConfig」にformatを指定します。 | ||
Line 58: | Line 62: | ||
ここで「%(asctime)s」が日付と時間で、「%(message)s」がメッセージです。 | ここで「%(asctime)s」が日付と時間で、「%(message)s」がメッセージです。 | ||
+ | 出力は | ||
+ | 2016-12-14 14:57:24,337 message | ||
+ | といった形となります。 | ||
+ | |||
+ | 他にログレベルを表示する「%(levelname)s」や関数名を表示する「%(funcName)s」、ファイル名を表示する「%(filename)s」などもよく使います。 | ||
**ソースコードの行数を表示する [#u2b92169] | **ソースコードの行数を表示する [#u2b92169] | ||
Line 66: | Line 75: | ||
import logging | import logging | ||
import inspect | import inspect | ||
+ | |||
logging.info('line:%d',inspect.currentframe().f_lineno) | logging.info('line:%d',inspect.currentframe().f_lineno) | ||
- | 他に関数名やファイル名などもとれます。 | + | 他に関数名やファイル名などもとれますが、前節にご紹介したようにこれらはloggingにも表示する機能があります。しかし、inspectの便利な機能として、関数の呼び出しスタックをさかのぼる「f_back」をがあります。これを使えば呼び出し元の情報がとれます。 |
- | logging.info('function:%s',inspect.currentframe().f_code.co_name) | + | |
- | logging.info('filename:%s',inspect.currentframe().f_code.co_filename) | + | 例えば、以下のようにすると、「logTest」関数が実行された場所をログ出力できます。 |
+ | def logTest(): | ||
+ | logging.info('function:%s',inspect.currentframe().f_back.f_code.co_name) | ||
+ | logging.info('filename:%s',inspect.currentframe().f_back.f_code.co_filename) | ||
+ | |||
+ | これを使うと自分用のログ出力関数なども簡単に作れます。 |
(This host) = https://njf.jp