Pythonでログをとりたい!フォーマットを指定して出力する簡単な方法

こんにちは、ライターのアキヒロです。

「プログラムが、どうしてこんな動きになっているんだろう」
 

「変数がどうなってるか知りたいな」
 

そんなことを考えたことはありませんか?

この記事では、Pythonでログをとるために使う、loggingformatの使い方について解説します。

この記事では

  • loggingを使ってログをとる方法
  • formatを変更する方法

といった基本的な内容から

  • logging formatをさらに便利に使う方法

まで解説します。

ログをとってみよう

print文をプログラムの間に挿入して、動作確認を行ったことはありますか?

print文を使えば、確かに変数の確認や、どこが実行されているかは分かります。

しかし、Pythonにはもっと簡単かつ便利にログをとれる、loggingというモジュールがあるのです!

それでは実際にコードを書いてみましょう。

まず、loggingモジュールをインポートしています。

次に、getLogger関数を使ってloggerオブジェクトを宣言しています。引数にはログの出力名を渡します。

最後に、ログメッセージを出力しています。

今回はlogging.warning()を使ったので、WARNINGというログメッセージが出力されていることがわかります。

他にも、想定通りのことが起こった時に使うinfo()や、重大な問題が発生したときに使うerorr()などがあります。

ログの出力を変更しよう

loggingで独自のログメッセージを出力できることがわかりました。

しかし、このままではprint文でメッセージを出力することと、あまり変わりません。そこで、次はフォーマットを指定してログメッセージを出力してみましょう!

formatの使い方

では早速、loggingのフォーマットを変更して出力の変化を見てみましょう。

先ほどのコードに一行が加わりました。

loggingのフォーマットはloggingモジュールのbasicConfig関数で指定できます。

levelname,messageについても説明しましょう。

levelnameはログレベルのことです。今回はWARNINGというレベルで出力しているため、levelnameにはWARNINGが出力されるはずです。

messageは名前の通り、ログメッセージです。今回は「警告!」というメッセージを表示するように指定しているため、messageには「警告!」が出力されるはずです。

では実際の出力を確認してみましょう。

確かに、指定したフォーマット通りに出力できています。

フォーマットを指定しなかった場合の出力と見比べてみましょう。

指定しなかった時にはrootが含まれており、出力結果が変わっていることがわかりますね。

なお、サンプルコードは別のモジュールを想定しているため、毎回importとgetLoggerを記述しています。同じモジュールであれば一度記述すればよいので注意しましょう。

色々なフォーマット

次は、どんなフォーマットを指定できるのか見ていきましょう。

asctimeを使えば時刻を表示できます。

funcNameを使えばloggingを呼び出している関数名を表示できます。

せっかくなので関数を作ってもう一度実行してみましょう。

showlog()という関数名が正しく表示されていますね!

その他にも

loggingが呼び出された行番号がわかる%(lineno)d、loggingが呼び出されたファイルのフルパスがわかる%(pathname)s、プロセスIDがわかる%(process)dなんてものもあります。

もっとlogging formatを便利に使おう

ここまで、フォーマットを指定するログメッセージを見てきました。

次は、loggingをさらに便利に使う方法について説明していきます。

ログレベルとは?

今まで

でログメッセージを出力していました。

これは前述の通り、WARNINGというログレベルでログメッセージを出力しています。

今度は他のレベルでログメッセージを出力できるか見てみましょう。

DEBUGが最も重要度が低く、CRITICALが最も重要度が高いです。

デフォルトのレベルはWARNINGに設定されているため、WARNINGよりも重要度が高いログメッセージだけが出力されています。

次はレベルをWARNINGからDEBUGに変更して、同じようにログメッセージを表示してみましょう。

formatと同じくbasicConfig()でlevelをDEBUGに変更しました。早速、出力を見てみましょう。

DEBUGが最も重要度が低いため、すべてのログメッセージが出力されていますね!

このようにログレベルによって表示の有無を簡単に設定できるのです。

ログ出力を無効化する

続いて、ログ出力を無効化してみましょう。

logging.disable()でWARNINGを指定しました。これによって指定したレベル以下のログメッセージはすべて抑制されます。

そのため今回のコードではWARNING以下のレベル(WARNING, INFO, DEBUG)がすべて無効化されました。

print文とは違い、ログメッセージの無効化を使えばたった一行でログメッセージを見やすくできるのです。

ログをファイルに出力する

今までは、画面上にログメッセージを表示してきました。しかし、ログメッセージはファイルに書き出すこともできるのです。

今までと同様に、WARNINGレベルのログメッセージを表示します。ただし今回はlog.txtというファイルにログメッセージを保存しています。

画面上ではなくファイル上にログを書き出せば、ログメッセージで画面を埋めることなく後で保存されたログメッセージを読めるため、非常に便利です。

その他のloggingの使い方については以下の記事で詳しく書いています。ぜひご参照ください。

【Python入門】loggingモジュールで処理の記録を残してみよう!
更新日 : 2019年8月7日

まとめ

今回は、loggingモジュールのbasicConfig()関数を使うことによって、ログメッセージの表示を変更できることを紹介しました。

loggingはプログラムの動作確認やデバッグで役立ちます。

ぜひマスターしてログを簡単にとれるようになりましょう!

LINEで送る
Pocket

最短でエンジニアを目指すなら侍エンジニア塾

cta_under_bnr

侍エンジニア塾は業界で初めてマンツーマンレッスンを始めたプログラミングスクールです。これまでの指導実績は16,000名を超え、未経験から数多くのエンジニアを輩出しています。

あなたの目的に合わせてカリキュラムを作成し、現役エンジニア講師が専属であなたの学習をサポートするため効率よく学習を進めることができますよ。

無理な勧誘などは一切ありません。まずは無料体験レッスンを受講ください。

無料体験レッスンの詳細はこちら

書いた人

アキヒロ

ライターのアキヒロです。大学で機械学習・自然言語処理を学び、Pythonという言語を中心にコードを書いています。

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説