Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【ITニュース解説】I Built a Custom Python Logger Module without OOP (Console, File & DB Logging)

2025年09月13日に「Dev.to」が公開したITニュース「I Built a Custom Python Logger Module without OOP (Console, File & DB Logging)」について初心者にもわかりやすく解説しています。

作成日: 更新日:

ITニュース概要

Pythonで作成されたカスタムロガーは、OOPを使わず手続き型で実装されている。ログをコンソール、ファイル、SQLiteデータベースに出力でき、多様なログタイプとレベルに対応する。軽量で再利用しやすく、プロジェクトへの組み込みも容易なため、効率的なログ管理に役立つ。

ITニュース解説

ソフトウェア開発において、「ログ」はシステムの挙動を記録するための非常に重要な情報源だ。システムが期待通りに動作しているかを確認したり、問題が発生した際に何が起きたのか原因を特定したりするために、ログはなくてはならない存在となる。例えば、Webサイトがエラーを起こしたとき、「いつ、どこで、どんなエラーが発生したのか」という情報をログから読み解くことで、迅速に問題を解決できる。これは、システムエンジニアが日常的に行う作業の一つである。

今回紹介する記事は、Pythonというプログラミング言語を使って、開発者が自分で「カスタムロギングモジュール」を構築した事例について解説している。特筆すべきは、現代のプログラミングでよく用いられる「オブジェクト指向プログラミング(OOP)」という手法を使わず、よりシンプルな「手続き型プログラミング」というアプローチでこのモジュールを実現している点だ。これにより、コードは軽量で理解しやすく、他のプロジェクトにも手軽に組み込めるよう設計されている。

このカスタムロギングモジュールは、システムエンジニアが開発や運用で必要とする多様なロギング機能を提供している。まず、「マルチタイプロギング」として、ログメッセージをその重要度や内容に応じて細かく分類できる。具体的には、最も詳細な情報を示すTRACE、デバッグ用のDEBUG、一般的な情報を示すINFO、成功メッセージのSUCCESS、注意を促すWARNING、重大なエラーを示すERROR、そしてシステム停止に至るような致命的な問題を示すFATALといった種類がある。これにより、ログを見たときに、それがどの程度の緊急性を持つ情報なのかを一目で判断できる。

次に、「マルチレベルロギング」という機能を使えば、どの種類のログメッセージを実際に記録するかを制御できる。例えば、開発中は詳細なTRACEやDEBUGレベルのログも全て記録する「ALL」に設定し、本番環境ではエラーや警告など重要なログのみを記録する「HIGH」や「MEDIUM」、「LOW」といった設定に切り替えることができる。これにより、必要な情報だけを効率的に収集し、ログファイルが肥大化しすぎるのを防ぐことが可能になる。

さらに、ログの出力先も複数選べる「マルチ出力ロギング」に対応している。一つは、開発者がプログラムを実行中にすぐに結果を確認できる「コンソール」への出力だ。コンソールには、ログの種別ごとに色分けされた、見やすいフォーマットで表示される。二つ目は、ログをファイルとして永続的に保存する「ファイルロギング」だ。これにより、プログラムが終了した後でも、過去のログを振り返って分析できる。ファイル形式は標準的な.logファイルで、保存先も自由に指定できるため、プロジェクトの構造に合わせて柔軟に設定できる。三つ目は、「データベースロギング」で、SQLite3という軽量なデータベースにログを保存する機能だ。データベースにログを保存すると、ログメッセージが日時、レベル、内容といった列に構造化されて格納されるため、後から特定の条件でログを検索したり、統計情報を分析したりするのが非常に容易になる。

他にも、このモジュールには便利な機能が多数備わっている。「名前付きロガー」機能を使えば、プロジェクト内の異なる部分や複数のアプリケーションで別々のロガーを作成し、それぞれにユニークな名前を付けて管理できる。これにより、どの部分から出力されたログなのかが明確になり、ログの追跡がしやすくなる。また、「トグル可能出力」機能により、コンソール、ファイル、データベースといったそれぞれの出力先を、プログラムの実行中に動的に有効にしたり無効にしたりできる。これは、特定の期間だけ詳細なログをDBに記録したい場合などに非常に役立つ。全体として、このモジュールは軽量で再利用性が高く、さまざまなPythonプロジェクトに簡単に組み込むことができるように設計されている。

このカスタムロギングモジュールを実際に使う手順は非常にシンプルだ。まず、提供されているlogger.pyというファイルを手持ちのPythonプロジェクトのディレクトリに配置する。次に、Pythonのスクリプト内でimport loggerと記述してモジュールを読み込む。ロギングを開始するには、log = logger.create_logger("MyLogger")のように、ロガーに名前を付けて作成し、logger.initialize_logger(log, True, True)のように初期化関数を呼び出す。このTrueという引数は、コンソール出力とファイル出力を有効にするかどうかを意味している。

ログメッセージを出力する際は、logger.fatal(log, "テストの致命的エラー")のように、作成したロガーオブジェクトとメッセージを引数として渡すだけで良い。メッセージの中には、Pythonの文字列フォーマット機能を使って、変数や数値を埋め込むこともできる。ファイルロギングやデータベースロギングを有効にするには、それぞれlog.set_toggle_file_logging(True)logger.set_toggle_database_logging(log, True)といった関数を呼び出す。ログファイルを保存するパスを変更したい場合は、logger.set_file_path(log, "C:\\Users\\YourName\\logs")のように指定する。また、ログレベルの制御はlogger.set_log_level(log, LogLevel.LOW)のように行い、LogLevel.LOWなどの定義済みのレベルを設定することで、出力するログの範囲を調整できる。

このカスタムロギングモジュールは、Python 3で書かれており、inspect(プログラムの実行情報を取得)、os(ファイルやディレクトリ操作)、enum(定数管理)、datetime(日付や時刻の操作)、sqlite3(SQLiteデータベースとの連携)といったPythonの標準モジュールを活用して作られている。外部の特別なライブラリに依存していないため、非常に導入しやすく、安定して動作することが期待できる。

このプロジェクトはまだ開発途上にあり、将来的にはMySQLなどの他のデータベースへのロギング、複数のスレッドや非同期処理に対応したロギング、そしてユーザーが独自のログメッセージタイプを定義できる機能の追加などがロードマップとして計画されている。システムエンジニアを目指す人にとって、このようなカスタムモジュールをゼロから作成し、機能を拡張していく過程は、プログラミングやシステム設計のスキルを磨く上で非常に良い学びの機会となるだろう。

関連コンテンツ