Ad
1: 2016-12-14 (水) 05:36:06 njf ソース バックアップ No.1 を復元して編集 現: 2017-01-01 (日) 15:15:28 njf ソース 編集
Line 7: Line 7:
*使い方 [#y6ff9a66] *使い方 [#y6ff9a66]
-loggingでの簡単な例は以下の通りです。+**基本的な出力 [#r7dfa599] 
 +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 22: Line 23:
ログのレベルには以下の物があります。 ログのレベルには以下の物があります。
 +|レベル|対応メソッド|使いどころ|
 +|DEBUG|debug|デバック用の情報など|
 +|INFO|info|予定通りのことが起こった場合など|
 +|WARNING|warning|問題が起こりそうな場合の警告|
 +|ERROR|error|一部の機能が実行できないようなエラー|
 +|CRITICAL|critical|プログラム自体が実行できない重大なエラー|
 +
 +表の下に行くほど重要なログで、出力されやすくなります。
 +
 +例えばログのレベルをINFOにしていると、DEBUGレベルであるdebugメソッドのログは出力されず、残りのinfo、worning,error、criticalが出力されます。
 +
 +これ以外に例外発生時のみに使う「exception」やレベルを指定して実行するlogメソッドもあります。
 +
 + logging.log(logging.DEBUG,"デバッグ")
 +
 +これらのメソッドの引数はマルチバイト文字があってもStr型でもUnicode型でも出力できます。
 +
 +また
 + logging.info('info %s',"test")
 +のように「%」書式を使うこともできます。
 +
 +**日付と時間の出力 [#pba4f949]
 +
 +loggingの出力はデフォルトでは
 +
 + INFO:root:info test
 +
 +のようになっています。
 +つまり「ログレベル:階層:メッセージ」です。
 +階層はloggerの階層だそうですが、あまり使いそうにないので気にしなくても良いと思います。
 +
 +実際に使う時には日付と時間がないと、実用にはならないでしょう。
 +普段運用しているシステムならもちろん、開発中でもデバッグがうまくいかないと思っていたら、実は古いログを見ていたというのは「開発者あるある」の一つです。日付と時間はなるべく早い段階で入れるのがおすすめです。
 +
 +「日付:メッセージ」とするには「logging.basicConfig」にformatを指定します。
 +
 + logging.basicConfig(filename='test.log',format = "%(asctime)s:%(message)s",level=logging.DEBUG)
 +
 +ここで「%(asctime)s」が日付と時間で、「%(message)s」がメッセージです。
 +出力は
 + 2016-12-14 14:57:24,337 message
 +といった形となります。
 +
 +他にログレベルを表示する「%(levelname)s」や関数名を表示する「%(funcName)s」、ファイル名を表示する「%(filename)s」などもよく使います。
 +
 +**ソースコードの行数を表示する [#u2b92169]
 +
 +ログの出力で他によくほしくなるものとしてソースコードの行数があります。
 +「logging」にその機能はありませんが、「inspect」を使えば簡単に表示できます。
 +
 + import logging
 + import inspect
 + 
 + logging.info('line:%d',inspect.currentframe().f_lineno)
 +他に関数名やファイル名などもとれますが、前節にご紹介したようにこれらはloggingにも表示する機能があります。しかし、inspectの便利な機能として、関数の呼び出しスタックをさかのぼる「f_back」をがあります。これを使えば呼び出し元の情報がとれます。
 +例えば、以下のようにすると、「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)
-&font(Lime){記事制作中};+これを使うと自分用のログ出力関数なども簡単に作れます。


トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード印刷に適した表示   ページ新規作成 全ページ一覧 単語検索 最新ページの一覧   ヘルプ   最新ページのRSS 1.0 最新ページのRSS 2.0 最新ページのRSS Atom Powered by xpWiki
Counter: 2199, today: 1, yesterday: 0
MenuBar
広告

ログイン

ユーザー名:


パスワード:





パスワード紛失

Portuguese | English | German | Greek | Japanese | Korean | Russian | T-Chinese top
NJF