プログラミングマガジン

プログラミングを中心にIT技術をできるだけわかりやすくまとめます。

  • ホーム
  • Python
  • 【Python】ログ出力ライブラリlogging
 
 
     
  • サーバー言語  
    • Python
    • Ruby
    • PHP
    • SQL
  •  
  • インフラ  
       
    • AWS
    •  
    • 基本
    • Git
  • Web
       
    • Web開発
    • JavaScript
    • Vue.js
    • React
  •  
  • 設計  
       
    • 実装設計
    • DB設計
  • 問い合わせ
  

【Python】ログ出力ライブラリlogging

06.04

  • miyabisan2
  • コメントを書く

この記事は2分で読めます

Python logging

Pythonでログを出力するためのモジュールです。printでも良いのですがloggingの方が便利機能が豊富に含まれています。

1
2
import logging
logging.info("ログ出力内容")

ログレベル

ログレベルラベル説明
1CRITICAL実行が続けられないくらいの重大な障害
2ERRORある機能を実行できない位の局所的な問題
3WARNING想定外のことが起きて問題が発生しそうな状態
4INFO想定通り実行されているか確認するための情報出力
5DEBUGデバッグする際に詳細な情報を出力する場合に使う。

辞書形式で出力する

こんな感じで辞書形式で設定しておけばまとめて確認できる上に何の情報が出力されているかわかるので後から見た時に非常に便利です。

1
2
3
4
logging.debug({
    'status': response.status,
    'url': response.url,
})

ロギングオブジェクト

1
2
3
4
5
6
7
from logging import getLogger,StreamHandler,DEBUG
logger = getLogger(__name__)
handler = StreamHandler()
handler.setLevel(DEBUG)
logger.setLevel(DEBUG)
logger.addHandler(handler) # ロガーにハンドラーオブジェクトを指定
logger.debug("デバッグします。")

ロギングオブジェクトはログ出力を命令するオブジェクトです。

__name__

Pythonファイルのモジュール名が入っています。(普通に実行すると「__main__」が入ります。)

StreamHandler()

実際にどうやってログの出力をするか操作しているオブジェクトです。Pythonの標準出力に出力するためのハンドラーになります。

logger.setLevel(DEBUG)

DEBUG以上のレベル(INFO、ERRORなど)を扱ってくださいとloggerに指定してます。

ログのフォーマット

自分の好きなようにログ出力のフォーマットをカスタマイズできる機能です。ハンドラーに対して設定します。

'%(levelname)s'ログのレベル
'%(asctime)s'ログが出力された時間
'%(message)s'メッセージ
'%(filename)s'ファイル名(注意点として、ログ出力先のファイル名ではなくログ出力を実行したコードのファイル名です。)
1
2
3
4
from logging import Formatter
formatter = Formatter('[%(levelname)s] %(filename)s %(asctime)s %(message)s')
handler.setFormatter(formatter)
logger.debug("デバッグします。") # [DEBUG] log.py 2023-06-18 10:49:19,061 デバッグします。

ファイル出力

1
2
3
from logging import getLogger,FileHandler,DEBUG
handler = FileHandler('test.log')
logger.debug("デバッグします。")

FileHandlerモジュールを使うことでログをファイル名を指定してファイル出力することができます。

なお、デフォルトでは複数回実行した場合は上書きではなくファイルに追記されるようになっています。

ログレベルによるファイルの出し分け

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
from logging import getLogger,FileHandler,DEBUG,ERROR
logger = getLogger(__name__)
handler = FileHandler('test.txt')
logger.setLevel(DEBUG)
handler.setLevel(DEBUG)
logger.addHandler(handler) # ロガーにハンドラーオブジェクトを指定
from logging import Formatter
formatter = Formatter('[%(levelname)s] %(filename)s %(asctime)s %(message)s')
handler.setFormatter(formatter)
logger.debug("デバッグします。")
 
error_handler = FileHandler('error.txt')
logger.setLevel(ERROR)
logger.addHandler(error_handler) # ロガーにハンドラーオブジェクトを指定
logger.error("エラーです。")

ログレベルごとに別々のハンドラーを作ってloggerにそれぞれ設定してあげることによってログファイルを出し分けることができます。

loggerのログレベルを低くしておいて、handlerのログレベルをファイルによって調整するという使い分けをすることがプロダクトレベルのコードを実装するうえで重要になってきます。

スポンサーリンク
  • 2023 06.04
  • miyabisan2
  • コメントを書く
  • Python
  • Tweets Twitter
  • このエントリーをはてなブックマークに追加
  • LINEで送る

関連記事

  1. 2023 06.04

    【Python】Scrapyで複数ページを操る。

  2. 2023 06.26

    【Python】モジュール、自作モジュール、パッケージ、ライブラリ

  3. 2023 05.26

    【Python】主流のスクレピングライブラリ

  4. 2023 06.16

    【Python】WindowsでAnacondaを使った環境構築

  5. 2023 05.31

    【Python】Seleniumでクローリング環境を構築

  6. 2018 06.18

    【Python】基礎知識(言語の特徴、フレームワーク)

  • コメント ( 0 )
  • トラックバック ( 0 )
  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

返信をキャンセルする。

【Python】Scrapyで複数ページを操る。

【Python】scrapyのcrawlテンプレートで…

RETURN TOP

著者プロフィール

エンジニア歴10年で過去に業務系、Webデザイン、インフラ系なども経験あります。現在はWeb系でフロントエンド開発中心です。

詳細なプロフィールはこちら

スポンサーリンク

カテゴリー

  • Android
  • AngularJS
  • API
  • AWS
  • C++
  • CSS
  • C言語
  • DDD
  • DevOps
  • Django
  • Docker
  • Figma
  • Git
  • GitLab
  • GraphQL
  • Hasura
  • Java
  • JavaScript
  • Kubernetes
  • Laravel
  • linux
  • MySQL
  • Next.js
  • nginx
  • Node.js
  • NoSQL
  • Nuxt.js
  • Oracle
  • PHP
  • Python
  • React
  • Redux
  • Rspec
  • Ruby
  • Ruby on Rails
  • Sass
  • Spring Framework
  • SQL
  • TypeScript
  • Unity
  • Vue.js
  • Webサービス開発
  • Webデザイン
  • Web技術
  • インフラ
  • オブジェクト指向
  • システム開発
  • セキュリティ
  • その他
  • データベース
  • デザインパターン
  • テスト
  • ネットワーク
  • プログラミング全般
  • マイクロサービス
  • マイクロソフト系技術
  • マルチメディア
  • リファクタリング
  • 副業
  • 未分類
  • 業務知識
  • 生成AI
  • 設計
  • 関数型言語
RETURN TOP

Copyright ©  プログラミングマガジン | プライバシーポリシー