この記事では、log4j とは何か、どのように機能するか、そしてなぜそれを使用する必要があるのかについて説明します。また、ログ ライブラリを利用して Python プログラミング言語で log4j を使用する方法についても説明します。
Log4j の概要とその使用の重要性
log4j は、プログラマがアプリケーションにデータを記録するときに役立つソフトウェアです。また、データのログ記録とは、アプリケーションで実行されたアクティビティやアクションをログに記録することを意味します。
log4j は、セキュリティ上の理由から、たとえばさまざまな認証を確認するために使用できます。ただし、デバッグ目的でアプリケーション内で何が起こっているかを記録するために使用することもできます。
または、アプリケーションが何を行っているかの概要を取得します。たとえば、log4j は、途中まで構築されたアプリケーションである Java プログラミング言語のフレームワークです。
また、Python では、log4j の代わりにロギング モジュールを使用しました。ロギングは、アプリケーションのアクションと状態をセカンダリ インターフェイスに記録するプロセスです。言い換えれば、プログラムの操作はファイルに書き込まれますが、ログの記録はどのように開始するのでしょうか?
そうですね、ログレベルについてよく理解しておく必要があります。各ログ ライブラリを使用すると、特定のレベルで情報をロックダウンできます。理解する必要がある主なログ レベルは 5 つあります。
レベル | 説明する |
---|---|
デバッグ | デバッグ レベルは、開発中、またはバグ修正やトラブルシューティングに使用されます。開発者固有の情報はすべてこのレイヤーの下にあります。 |
情報 | 情報レベルは、デフォルトのユーザーまたはシステム ビューのアクションなど、プログラムの重要なデフォルト アクションをログに記録するために使用されます。 |
警告 | 警告レベルは、長期的にはエラーになる可能性のあるイベントをログに記録するために使用されます。このログ レベルは、エラーを追跡するのに役立ちます。 |
エラー | エラー レベルは、プログラムの実行に何らかの間違った影響を与えるエラーであるエラーをログに記録するために使用されます。 |
致命的 | クリティカル レベルは世界の終わりであり、プログラムは機能しなくなっているか、ひどく壊れています。 |
Python のロギング ライブラリを利用した Log4j の使用
現時点では単純な基本コードを実行しているだけであり、そのようなロジックはありませんが、すべてのログをファイルに書き込む方法など、いくつかの理解を示したいと思います。
コードに入りましょう。まずログ システムを構成し、basicConfig()
メソッドを呼び出し、filename パラメーターを使用してファイル名を渡します。Python はすべてのログ メッセージをこのファイルに書き込みます。ファイルが存在しない場合は、Python が作成します。
後者のパラメータは filemode です。これは、ファイル モードが書き込みモードへの追加モード、または入力したものを意味することを意味します。デフォルトでは、ファイルは追加モードで作成されます。次は、asctime、levelname、message、およびその他の多くの情報を表す形式です。
asctime は基本的に、ログに関連するこの特定のテキスト ファイルに出力される時刻の種類を示します。2 番目のパラメータ値は levelname と呼ばれるもので、このパラメータは実行中に発生したエラーの種類を示します。
このメッセージは、そのログ メッセージに出力しようとしているすべてのメッセージです。datefmt を使用しています; このパラメータは時間を特定の順序で出力します。
basicConfig()
関数には異なるプロパティがあり、そこからすべてのプロパティを読み取ることができます。
import logging
logging.basicConfig(filename='demo.txt',
filemode='a',
format='%(asctime)s %(levelname)s-%(message)s',
datefmt='%Y-%m-%d %H:%M:%S')
Now we have written a simple logic where we compare the percentile with some numbers and append some logs inside the text file.
for i in range(0,15):
if i%2==0:
logging.error('Log error message')
elif i%3==0:
logging.warning('Log warning message')
elif i%5==0:
logging.debug('Log debug message')
elif i%7==0:
logging.critical('Log critical message')
else:
logging.info('Log info message')
出力:
2022-09-01 23:21:28 ERROR-Log error message
2022-09-01 23:21:28 ERROR-Log error message
2022-09-01 23:21:28 WARNING-Log warning message
2022-09-01 23:21:28 ERROR-Log error message
2022-09-01 23:21:28 ERROR-Log error message
2022-09-01 23:21:28 CRITICAL-Log critical message
2022-09-01 23:21:28 ERROR-Log error message
2022-09-01 23:21:28 WARNING-Log warning message
2022-09-01 23:21:28 ERROR-Log error message
2022-09-01 23:21:28 ERROR-Log error message
2022-09-01 23:21:28 ERROR-Log error message
プログラムを実行した後、情報とデバッグのログがテキスト ファイルに追加されていないことがわかります。デフォルトでは、levelname は error を呼び出し、errorlevel は情報とデバッグを表示しないためです。
ただし、logging.DEBUG を渡すときに level パラメーターを使用することで、他のレベルを使用できます。
level=logging.DEBUG
ここで、demo.txt ファイルを実行して開くと、すべてのログ メッセージが表示されますが、ログ レベルをlogging.ERRORに更新すると、エラー メッセージと重大なメッセージが表示されます。
2022-09-01 23:23:57 ERROR-Log error message
2022-09-01 23:23:57 INFO-Log info message
2022-09-01 23:23:57 ERROR-Log error message
2022-09-01 23:23:57 WARNING-Log warning message
2022-09-01 23:23:57 ERROR-Log error message
2022-09-01 23:23:57 DEBUG-Log debug message
2022-09-01 23:23:57 ERROR-Log error message
2022-09-01 23:23:57 CRITICAL-Log critical message
2022-09-01 23:23:57 ERROR-Log error message
2022-09-01 23:23:57 WARNING-Log warning message
2022-09-01 23:23:57 ERROR-Log error message
2022-09-01 23:23:57 INFO-Log info message
2022-09-01 23:23:57 ERROR-Log error message
2022-09-01 23:23:57 INFO-Log info message
2022-09-01 23:23:57 ERROR-Log error message
任意の数値をゼロで除算するという一般的な問題を見てみましょう。このアクションを決定するには、try ブロックを使用します。
操作が失敗した場合は、Exception ブロックに入り、エラーをログに記録します。
try:
1/0
except:
logging.error('Log zero division error occurs')
出力:
2022-09-02 00:29:48 ERROR-Log zero division error occurs
おそらくプロジェクトで作業するたびにこのログ記録メカニズムを記述する必要があるため、これはプロジェクトの重要な部分です。
完全な Python コード:
import logging
logging.basicConfig(filename='demo.txt',
filemode='w',
format='%(asctime)s %(levelname)s-%(message)s',
datefmt='%Y-%m-%d %H:%M:%S',
level=logging.DEBUG)
# for i in range(0,15):
# if i%2==0:
# logging.error('Log error message')
# elif i%3==0:
# logging.warning('Log warning message')
# elif i%5==0:
# logging.debug('Log debug message')
# elif i%7==0:
# logging.critical('Log critical message')
# else:
# logging.info('Log info message')
try:
1/0
except:
logging.error('Log zero division error occurs')