検索
ホームページバックエンド開発Python チュートリアルPython のロギング組み込みモジュールの使用方法の詳細な説明

ロギングモジュールの紹介

Python のログ モジュールは、サードパーティのモジュールまたはアプリケーションで使用できる一般的なログ システムを提供します。このモジュールはさまざまなログ レベルを提供し、ファイル、HTTP GET/POST、SMTP、ソケットなどのさまざまな方法でログを記録できます。特定のログ記録メソッドを自分で実装することもできます。
ロギング モジュールと log4j のメカニズムは同じですが、具体的な実装の詳細は異なります。このモジュールは、ロガー、ハンドラー、フィルター、およびフォーマッタを提供します。

  • logger: アプリケーション コードで使用するログ インターフェイスを提供します。ロガーの最も一般的に使用される操作は、構成とログ メッセージの送信という 2 つのカテゴリに分類されます。ロガー オブジェクトは、logging.getLogger(name) を通じて取得できます。名前が指定されていない場合、同じ名前の getLogger メソッドを複数回呼び出すと、同じロガー オブジェクトが返されます。
  • ハンドラー: ログレコードをファイル、ソケットなどの適切な宛先に送信します。ロガー オブジェクトは、addHandler メソッドを通じて複数のハンドラーに 0 を追加でき、各ハンドラーは異なるログ レベルを定義して、階層的なフィルタリングとログの表示を実現できます。
  • フィルター: ログ レコードがハンドラーに送信されるかどうかを決定するエレガントな方法を提供します。
  • フォーマッタ: ログ出力の特定の形式を指定します。フォーマッタのコンストラクタには、メッセージのフォーマット文字列と日付文字列の 2 つのパラメータが必要です。どちらもオプションです。

log4j と同様に、ロガー、ハンドラー、およびログ メッセージの呼び出しには、ログ メッセージのレベルがロガーおよびハンドラーのレベルより大きい場合にのみ、特定のログ レベル (レベル) を設定できます。

ロギング使用状況分析

1. logger =logging.getLogger("endlesscode") を初期化します。後続のログ形式の %(name)s は、ここでのモジュール名に対応します。
2. レベル logger.setLevel(logging.DEBUG) を設定します。 ログには、設定されたレベルを超えるログが記録されます。 3. ハンドラー、一般的に使用されるものは StreamHandler と FileHandler です。Windows では、1 つはコンソールとファイル ログ、1 つは CMD ウィンドウに出力され、もう 1 つはファイルに記録されると理解できます
。 4. 最終的なログ情報の順序、構造、内容を定義するフォーマッタ。私はこの形式 '[%(asctime)s] [%(levelname)s] %(message)s', '%Y- を使用するのが好きです。 %m -%d %H:%M:%S'、
%(name)s ロガーの名前
%(levelname)s のテキスト形式のログレベル
%(message)s ユーザーが出力したメッセージ
%(asctime)s 文字列としての現在時刻。デフォルトの形式は「2003-07-08 16:49:45,896」です。カンマの後に来るのはミリ秒です
%(levelno)s 数値形式のログレベル
%(pathname)s ログ出力関数を呼び出すモジュールのフルパス名には
が含まれていない可能性があります %(filename)sはログ出力関数を呼び出すモジュールのファイル名です
%(module)s ログ出力関数を呼び出すモジュールの名前
%(funcName)sはログ出力関数を呼び出す関数名です
%(lineno)d は、ログ出力関数を呼び出すステートメントが配置されているコード行です
%(created)f 現在の時刻。時刻を表す UNIX 標準浮動小数点数で表されます
%(relativeCreated)d ログ情報を出力する場合、ロガーが作成されてからのミリ秒数
%(thread)d スレッド ID。おそらくそうではありません
%(threadName)s スレッド名。おそらくそうではありません
%(process)d プロセス ID。おそらくそうではありません
5. 記録 object.debug(message) を使用してログを記録します
以下に例を書いてみましょう。CMD ウィンドウでは、エラーとそれ以上のレベルのログのみが出力されますが、デバッグとそれ以上のレベルの情報はログに出力されます

リーリー
実行すると、CMD ウィンドウには 2 つのログのみが記録され、spam.log には 5 つのログが記録されていることがわかります


2016712145241018.jpg (773×353)

プロジェクトが比較的大きく、ログが別のファイルで使用されている場合は、それをクラスにカプセル化して使用することを検討できます

リーリー
この方法では、オブジェクトを使用するたびにインスタンスを作成するだけで済みます

リーリー
CMD ウィンドウでエラー ログを赤、警告ログを黄色でマークしたい場合は、ctypes モジュールを使用できます


2016712145318276.jpg (732×225)

リーリー

複数のモジュールでロギングを使用する
ロギング モジュールは、同じ Python インタープリター内で、logging.getLogger('log_name') を複数回呼び出すと、複数のモジュールの場合でも同じロガー インスタンスを返すことを保証します。したがって、マルチモジュール シナリオでロギングを使用する一般的な方法は、メイン モジュールでロギングを構成し、この構成が複数のサブモジュールに影響を及ぼし、他のモジュールで getLogger を介して Logger オブジェクトを直接取得することです。
プロフィール:

リーリー
メインモジュールmain.py:

リーリー
サブモジュール mod.py:

リーリー
サブサブモジュール submod.py:

import logging 
 
logger = logging.getLogger('main.mod.submod') 
logger.info('logger of submod say something...') 
 
def tst(): 
  logger.info('this is submod.tst()...') 

然后运行python main.py,控制台输出:

2012-03-09 18:22:22,793 - root - DEBUG - test root logger... 
2012-03-09 18:22:22,793 - main - INFO - test main logger 
2012-03-09 18:22:22,809 - main - INFO - start import module 'mod'... 
2012-03-09 18:22:22,809 - main.mod.submod - INFO - logger of submod say something... 
2012-03-09 18:22:22,809 - main.mod - INFO - logger say something... 
2012-03-09 18:22:22,809 - main - DEBUG - let's test mod.testLogger() 
2012-03-09 18:22:22,825 - main.mod - DEBUG - this is mod.testLogger... 
2012-03-09 18:22:22,825 - main.mod.submod - INFO - this is submod.tst()... 
2012-03-09 18:22:22,841 - root - INFO - finish test... 

可以看出,和预想的一样,然后在看一下tst.log,logger配置中的输出的目的地:

2012-03-09 18:22:22,793 - main - INFO - test main logger 
2012-03-09 18:22:22,809 - main - INFO - start import module 'mod'... 
2012-03-09 18:22:22,809 - main.mod.submod - INFO - logger of submod say something... 
2012-03-09 18:22:22,809 - main.mod - INFO - logger say something... 
2012-03-09 18:22:22,809 - main - DEBUG - let's test mod.testLogger() 
2012-03-09 18:22:22,825 - main.mod - DEBUG - this is mod.testLogger... 
2012-03-09 18:22:22,825 - main.mod.submod - INFO - this is submod.tst()... 

tst.log中没有root logger输出的信息,因为logging.conf中配置了只有main logger及其子logger使用RotatingFileHandler,而root logger是输出到标准输出。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
Pythonの学習:2時間の毎日の研究で十分ですか?Pythonの学習:2時間の毎日の研究で十分ですか?Apr 18, 2025 am 12:22 AM

Pythonを1日2時間学ぶだけで十分ですか?それはあなたの目標と学習方法に依存します。 1)明確な学習計画を策定し、2)適切な学習リソースと方法を選択します。3)実践的な実践とレビューとレビューと統合を練習および統合し、統合すると、この期間中にPythonの基本的な知識と高度な機能を徐々に習得できます。

Web開発用のPython:主要なアプリケーションWeb開発用のPython:主要なアプリケーションApr 18, 2025 am 12:20 AM

Web開発におけるPythonの主要なアプリケーションには、DjangoおよびFlaskフレームワークの使用、API開発、データ分析と視覚化、機械学習とAI、およびパフォーマンスの最適化が含まれます。 1。DjangoandFlask Framework:Djangoは、複雑な用途の迅速な発展に適しており、Flaskは小規模または高度にカスタマイズされたプロジェクトに適しています。 2。API開発:フラスコまたはdjangorestFrameworkを使用して、Restfulapiを構築します。 3。データ分析と視覚化:Pythonを使用してデータを処理し、Webインターフェイスを介して表示します。 4。機械学習とAI:Pythonは、インテリジェントWebアプリケーションを構築するために使用されます。 5。パフォーマンスの最適化:非同期プログラミング、キャッシュ、コードを通じて最適化

Python vs. C:パフォーマンスと効率の探索Python vs. C:パフォーマンスと効率の探索Apr 18, 2025 am 12:20 AM

Pythonは開発効率でCよりも優れていますが、Cは実行パフォーマンスが高くなっています。 1。Pythonの簡潔な構文とリッチライブラリは、開発効率を向上させます。 2.Cのコンピレーションタイプの特性とハードウェア制御により、実行パフォーマンスが向上します。選択を行うときは、プロジェクトのニーズに基づいて開発速度と実行効率を比較検討する必要があります。

Python in Action:実世界の例Python in Action:実世界の例Apr 18, 2025 am 12:18 AM

Pythonの実際のアプリケーションには、データ分析、Web開発、人工知能、自動化が含まれます。 1)データ分析では、PythonはPandasとMatplotlibを使用してデータを処理および視覚化します。 2)Web開発では、DjangoおよびFlask FrameworksがWebアプリケーションの作成を簡素化します。 3)人工知能の分野では、TensorflowとPytorchがモデルの構築と訓練に使用されます。 4)自動化に関しては、ファイルのコピーなどのタスクにPythonスクリプトを使用できます。

Pythonの主な用途:包括的な概要Pythonの主な用途:包括的な概要Apr 18, 2025 am 12:18 AM

Pythonは、データサイエンス、Web開発、自動化スクリプトフィールドで広く使用されています。 1)データサイエンスでは、PythonはNumpyやPandasなどのライブラリを介してデータ処理と分析を簡素化します。 2)Web開発では、DjangoおよびFlask Frameworksにより、開発者はアプリケーションを迅速に構築できます。 3)自動化されたスクリプトでは、Pythonのシンプルさと標準ライブラリが理想的になります。

Pythonの主な目的:柔軟性と使いやすさPythonの主な目的:柔軟性と使いやすさApr 17, 2025 am 12:14 AM

Pythonの柔軟性は、マルチパラダイムサポートと動的タイプシステムに反映されていますが、使いやすさはシンプルな構文とリッチ標準ライブラリに由来しています。 1。柔軟性:オブジェクト指向、機能的および手続き的プログラミングをサポートし、動的タイプシステムは開発効率を向上させます。 2。使いやすさ:文法は自然言語に近く、標準的なライブラリは幅広い機能をカバーし、開発プロセスを簡素化します。

Python:汎用性の高いプログラミングの力Python:汎用性の高いプログラミングの力Apr 17, 2025 am 12:09 AM

Pythonは、初心者から上級開発者までのすべてのニーズに適した、そのシンプルさとパワーに非常に好まれています。その汎用性は、次のことに反映されています。1)学習と使用が簡単、シンプルな構文。 2)Numpy、Pandasなどの豊富なライブラリとフレームワーク。 3)さまざまなオペレーティングシステムで実行できるクロスプラットフォームサポート。 4)作業効率を向上させるためのスクリプトおよび自動化タスクに適しています。

1日2時間でPythonを学ぶ:実用的なガイド1日2時間でPythonを学ぶ:実用的なガイドApr 17, 2025 am 12:05 AM

はい、1日2時間でPythonを学びます。 1.合理的な学習計画を作成します。2。適切な学習リソースを選択します。3。実践を通じて学んだ知識を統合します。これらの手順は、短時間でPythonをマスターするのに役立ちます。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

SublimeText3 英語版

SublimeText3 英語版

推奨: Win バージョン、コードプロンプトをサポート!

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。