【Python】ロギングってなに?loggingモジュールの基本2020年6月12日Python学習Python学習【365日チャレンジ!】123日目のマスターU(@Udemy11)です。123というと、パチンコ店をイメージするのは私だけでしょうか?やっぱり数字が並ぶと気持ちがウキウキしちゃいます。Python学習365日チャレンジも1/3を超えて、最終目標がぼやっと見えてきましたが、まだまだ学習しないといけないことはたくさんあります。気を引き締めてPython学習を継続していきたいと思います。昨日は、Pythonの記述ルールについて、誰もが見やすいコードを書くために、改めて学習し直しました。importの基本的な記述ルールからはじまり、空白行の挿入ルールやインデントが半角スペースを4つ入れること、変数や関数の名前の付け方は、キャメルケースやスネークケースなどがありました。詳しいコードスタイルについては、こちらの記事を参考にしてください。Udemyのセールを活用してほしかったあのスキルを手に入れよう!【非公式】2020.06.11Pythonのコードを書くために必要な記述ルールを学習しようhttps://udemyfun.com/python-description-rulesPython学習【365日チャレンジ!】122日目のマスターU(@Udemy11)です。Pycharmでコードを書いてるとマークが表示されることがあります。これは、Pythonが定める【PEP8】という記述ルールに従っていませんよ〜という注意なんです。このドキュメントを隅から隅まで熟読すれば、Pythonの記述ルールの知識は完璧になりますが、そんな時間はありませんので、これまでに学習してきた復習を兼ねて、基本的な記述ルールをかいつまんで学習したいと思います。昨日の復習昨日は、何気なく使っていたPythonの用語について、きちんと理解するため...それでは本日の学習、ロギングに入っていきましょう!ロギングとはロギングをネットで調べると次のような説明が見つかります。ロギングとはロギングとは、起こった出来事についての情報などを一定の形式で時系列に記録・蓄積すること。そのように記録されたデータのことを「ログ」(log)という。IT用語辞典ようするに、あとから、何をしたのかわかるように、記録に残すことです。匿名と思われているツイッターなどの発言は、実はロギングによって、記録された情報をたどることができるので、どこの誰なのかわかってしまうわけです。犯罪に関係していない場合はその情報が開示されることはありませんが、誹謗中傷などで訴えられた場合、あなたの情報が開示されることは間違いないので、ネットでの発言にも責任が伴うということを理解しておきましょう。ログの種類ロギングで取得できるログはさまざまで、一例として次のようなものがあります。各種アプリケーションの処理情報パソコンの操作ログロギングは、ありとあらゆる情報を取得して、自動的に記録に残せるので、いってみればアプリケーションが書く日記のようなものですね。記録に残していれば、なにか問題が生じたときに、ログを分析することで、原因を特定できるので、プログラミングにおいて、ロギングは必須ということです。ログのレベルPythonでは、ロギングをするにあたって、取得するログの種類によって、5つのレベルに分けて記録をとることができます。日本語の説明をみるとわかりますが、緊急性の高いものから順番に並んでいます。この5つの内、loggingモジュールを使ってデフォルトの設定でログを記録できるのは、CRITICAL、ERROR、WARNINGの3つです。INFOとDEBUGについては、別途デフォルト引数を指定しないとloggingのコードを書いたとしても記録することはできません。こんな説明をしてもちょっとわかりづらいと思うので、実際に処理する際のコードを書いてみましょう。実際にログを出力するには、printをつかう必要はなく、次のように記述します。logginglogging.critical('危機的')logging.error('エラー')logging.warning('警告')logging.info('情報')logging.debug('デバッグ')出力結果CRITICAL:root:危機的ERROR:root:エラーWARNING:root:警告4行目から8行目で、それぞれのレベルのログを出力するコードを書いているにもかかわらず、出力されているのは、警告までです。このように、loggingのデフォルト設定では、警告レベルまでの出力しかできないということです。ログのレベルをdebugまで出力するには、次のコードを出力コードより前の行に記述します。logging.basicConfig(level=logging.DEBUG)baxicConfigの引数levelにレベルを指定することで、出力できるレベルを変更することができます。私自身勘違いしていたのですが、レベルに合わせたコードを書けば、勝手に警告とかのログを記録してくれるとおもっていました。ログを出力させることができるだけで、実際にどんなログを出力させるのかは、プログラマーが決めてコードを書く必要があります。こんなことが起これば、ちょっとやばいよねということが起こった場合、ログを記録するというコードを書く必要があるわけです。以前学習したtry-except文は、エクセプションが起こった場合、エラーを起こさずに処理を続けるために使いました。この時にエラーが起こっていることをログに出力すれば、普通に動いているけどエクセプションが発生していることがわかるわけですね。ログの出力内容ログを出力するには、loggingモジュールをインポートして、logging.critical()をはじめとする5つのメソッドに引数(例えば’警告’)を入れました。出力メソッドの引数には、.format()を使って変数などを代入することもできます。attentionとなりますが、5行目と6行目の%sを使った値の代入は、古いPythonのコードに出てくることがあるので、覚えておきましょう。ログをファイルへ出力これらのログは、Pythonファイルを実行すると、コンソールへ出力されますが、本来はログファイルへ出力する必要があります。ファイルへ出力するための設定は、basicConfigのデフォルト引数filenameを使って指定します。logginglogging.basicConfig(filename='lessonlog.log')logging.warning('これは困った!警告です')このコードを書いているPythonファイルと同じ階層にlessonlog.logが作成され、中身はWARNING:root:これは困った!警告ですとなります。今回は、日本語でログ文章を書いていますが、自分一人もしくは、日本人しか使うことが無いアプリなどで、グローバル展開をしないのなら、日本語のログでも問題はありません。日本語だと文字コードによって文字化けするリスクがあるので、ログは英語で書いた方がいいでしょう。自分だけしか使わないプログラムだとしても、ものすごく短いプログラムで無い限り、ロギングは必須です。プログラムがうまく動かなくなったときに、どの時点でエラーが起こっているのかを特定する必要がありますので、ロギングしていない場合は、デバッグをして、一つ一つコードをチェックしていく必要があります。ロギングできちんとログを残しておけば、どこでエラーが発生しているのかを特定することが容易になります。話は飛びますが、先日Amazonプライムで観た『AI崩壊』でも、人工知能【のぞみ】のログを解析することで、どこでプログラムが書き換えられているのかを特定できていました。突っ込みどころ満載の内容でしたが、邦画としてはなかなか楽しむことができた部類に入るのではないでしょうか?Amazonプライムで見るということで、今日はロギングの基本的なことについて学習しましたが、なんとなくロギングのことがわかってきたでしょうか?ロギングに関してはまだまだ学習することがありますので、明日もさらにロギングについて学習します。Udemyがセールをしているかどうかは、こちら...【Python】模範的な対話アプリケーションの構造解説(MVCモデル)Python学習【365日チャレンジ!】109日目のマスターU(@Udemy11)です。なにげに玄関を眺めていると、アシナガバチがポストに入って...【Python】マルチスレッドとマルチプロセスについてPython学習【365日チャレンジ!】203日目のマスターU(@Udemy11)です。9月になって少しは過ごしやすくなるのかと思いきや、まだま...【Python】簡単な対話アプリケーションの作成Vol.7Python学習【365日チャレンジ!】108日目のマスターU(@Udemy11)です。ホットケーキミックスが品薄になっていたらしですが、大量の...【Python】インフラの仮想環境を構築するイメージを理解しようPython学習【365日チャレンジ!】239日目のマスターU(@Udemy11)です。Keysのキー割り当てにハマった話Googleスプレッドシートの使い方講座Anacondaのアンインストールからの再インストールrequestsを使って仮想通貨のデータを取得Python学習【365日チャレンジ】を振り返ってみます。(2)Amazonのアソシエイトとして、当メディアは適格販売により収入を得ています。