長年Pythonを作成した後、私は常にPython独自のログモジュールを使用してログを記録してきました。ログを別の場所に出力したり、別のログ出力形式を設定したり、ログをファイルに分割したりするための構成を作成する必要があるたびに、圧縮待機。このログモジュールには何の問題もありません。誤ってアーティファクトを発見するまで、ログ記録は非常に簡単であることに気づきました。このアーティファクトはloguruです。
インストール
このライブラリのインストール方法は非常に簡単で、pipを直接使用できます。私は、Python 3バージョンを使用しています。インストールコマンドは、次のとおりです。
pip3 install loguru
小規模チョッパー
インストールが完了したら、それを使用できます。最も簡単な使用方法は次のとおりです。
from loguru import logger
logger.debug('this is a debug message')
設定は必要ありません。それを取得して使用するだけです。上記の例は、デバッグレベルのログを出力するためのもので、出力結果は次のとおりです。
2021-03-16 22:17:23.640 | DEBUG | __main__:<module>:8 - this is a debug message
この出力ログ情報には、日付、時刻、ログレベル、ログコード行数、およびログコンテンツ情報が含まれます。最も基本的なコンテンツがカバーされていると言えますが、もちろん、警告、情報、エラー、クリティカル、成功、その他のレベルを印刷することもできます。コンソールの出力ログも明るい色で、各レベルのログの色が異なり、クールすぎません!
ログファイル
多くの人がPythonを学び、どこから始めればよいのかわかりません。
多くの人がPythonを学び、基本的な文法を習得した後、どこから始めればよいかわかりません。
事例研究を行った多くの人々は、より高度な知識を学ぶ方法を知りません。
したがって、これら3つのタイプの人々のために、ビデオチュートリアル、電子書籍、およびコースのソースコードを無料で受け取ることができる優れた学習プラットフォームを提供します。
QQグループ:705933274
ファイルを書き込む
loguruでは、ログファイルを出力するために必要なadd()関数は1つだけです。
logger.add('hello.log')
logger.debug('i am in log file')
このとき、ログ情報は通常コンソールに出力され、ログファイルhello.logが同じレベルのディレクトリに生成されます。ログファイルを開くと、次の内容が表示されます。
2021-03-16 21:20:31.460 | DEBUG | __main__:<module>:12 - i am in log file
もちろん、ファイル内のログ出力の形式とレベルを指定するために、いくつかのパラメーターを追加することもできます。
log = logger.add('world.log', format="{time} | {level} | {message}", level="INFO")
logger.debug('i am debug message')
logger.info('i am info message')
対応するファイル出力情報は次のとおりです。
2021-03-16T22:47:53.226998+0800 | INFO | i am info message
情報レベルの情報のみを記録するようにファイルを設定したため、デバッグレベルのログ情報はログファイルに書き込まれません。
ログファイル名に情報を追加することもできます。
logger.add('hello_{time}.log')
上記のコードが実行された後、時間のあるログファイルが生成されます。
ファイルの書き込みを停止します
ログをファイルに書き込む必要がなくなったら、いつでも停止できます。
id = logger.add('world.log', format="{time} | {level} | {message}", level="INFO")
logger.info('this is a info message')
logger.remove(id)
logger.info('this is another info message')
add()メソッドはログファイルのIDを返します。情報の書き込みを停止する必要がある場合は、remove()メソッドを使用してIDを渡します。上記のコードが実行された後、ログファイルに記録される情報は次のとおりです。
2021-03-16T22:47:53.227389+0800 | INFO | this is a info message
remove()メソッドを呼び出した後、その背後にあるログ情報はログファイルに書き込まれません。
ローリングログファイル
ローテーションパラメータを設定して、ログファイルの生成方法を指定できます。通常のログレコードと同様に、ファイルサイズ、時刻、日付などに基づいて生成戦略を設定できます。
# 超过200M就新生成一个文件
logger.add("size.log", rotation="200 MB")
# 每天中午12点生成一个新文件
logger.add("time.log", rotation="12:00")
# 一周生成一个新文件
logger.add("size.log", rotation="1 week")
ログファイルの有効期間を指定します
保持パラメータを使用して、ログファイルの保持時間を指定することもできます。
logger.add("file.log", retention="30 days")
上記の設定により、ログファイルを最大30日間保持し、30日より前のログファイルを消去するように指定できます。
圧縮ファイルを構成する
スペースを節約するために、ログファイルを圧縮する必要がある場合があります。このloguruは次のことも実現できます。
logger.add("file.log", compression="zip")
上記の構成により、ログファイルの圧縮形式をzipとして指定しました。
例外キャッチ
Loguruはログを記録できるだけでなく、例外情報をキャプチャすることもできます。これにより、エラーの原因をより正確に追跡できます。
loguruモジュールでは、通常、例外をキャッチする2つの方法があります。catchデコレータを使用してキャッチする方法と、exceptionメソッドを使用してキャッチする方法です。
キャッチデコレータが例外をキャッチ
例を見てみましょう:
@logger.catch
def a_function(x):
return 1 / x
a_function(0)
出力情報は次のとおりです。
021-03-16 23:10:28.124 | ERROR | __main__:<module>:32 - An error has been caught in function '<module>', process 'MainProcess' (25939), thread 'MainThread' (140735895298944):
Traceback (most recent call last):
File "/Users/cxhuan/Library/Application Support/JetBrains/IntelliJIdea2020.3/plugins/python/helpers/pydev/pydevconsole.py", line 483, in <module>
pydevconsole.start_client(host, port)
│ │ │ └ 62146
│ │ └ '127.0.0.1'
│ └ <function start_client at 0x10fd596a8>
└ <module 'pydevconsole' from '/Users/cxhuan/Library/Application Support/JetBrains/IntelliJIdea2020.3/plugins/python/helpers/py...
......
> File "/Users/cxhuan/Documents/python_workspace/mypy/loguru/logurustudy.py", line 32, in <module>
a_function(0)
└ <function a_function at 0x11021e620>
File "/Users/cxhuan/Documents/python_workspace/mypy/loguru/logurustudy.py", line 30, in a_function
return 1 / x
└ 0
ZeroDivisionError: division by zero
上記のコードでは、意図的に1を0で割った例外を作成しました。ログ出力情報が非常に詳細であり、呼び出しの各ステップのエラー情報が詳細にリストされており、パラメーターの値も出力されていることがわかります。アウト、そして非常に直感的な指向性、それは単に異常な分析アーティファクトです!
例外メソッドは例外をキャッチします
例を直接見てみましょう。
def b_function1(x):
try:
return 1 / x
except ZeroDivisionError:
logger.exception("exception!!!")
b_function1(0)
上記のコードを実行すると、出力情報は次のようになります。
2021-03-16 23:16:07.602 | ERROR | __main__:b_function1:40 - exception!!!
Traceback (most recent call last):
File "/Users/cxhuan/Library/Application Support/JetBrains/IntelliJIdea2020.3/plugins/python/helpers/pydev/pydevconsole.py", line 483, in <module>
pydevconsole.start_client(host, port)
│ │ │ └ 62254
│ │ └ '127.0.0.1'
│ └ <function start_client at 0x118d216a8>
└ <module 'pydevconsole' from '/Users/cxhuan/Library/Application Support/JetBrains/IntelliJIdea2020.3/plugins/python/helpers/py...
File "/Users/cxhuan/Library/Application Support/JetBrains/IntelliJIdea2020.3/plugins/python/helpers/pydev/pydevconsole.py", line 411, in start_client
process_exec_queue(interpreter)
│ └ <_pydev_bundle.pydev_ipython_console.InterpreterInterface object at 0x118d36240>
└ <function process_exec_queue at
0x118d21400>
......
File "/Users/cxhuan/Documents/python_workspace/mypy/loguru/logurustudy.py", line 42, in <module>
b_function1(0)
└ <function b_function1 at 0x11913b598>
> File "/Users/cxhuan/Documents/python_workspace/mypy/loguru/logurustudy.py", line 38, in b_function1
return 1 / x
└ 0
ZeroDivisionError: division by zero
同様に、エラーの詳細は非常に詳細で直感的な方法で印刷されます。
総括する
需要がある場合は実現しますが、その需要をエレガントかつ簡潔に実現するために、私はこのloguruの作者にのみサービスを提供します。そして、多くの非常に便利な機能が追加されています、それはただの幽霊です!
自分で作成したPython学習グループ:705933274を引き続きお勧めします。全員がPythonを学習しています。Pythonを学習したい、または学習している場合は、ぜひ参加してください。誰もがソフトウェア開発パーティーであり、最新のPythonの高度な資料のコピーや、2021年に私が編集したゼロベースの教育など、随時(Pythonソフトウェア開発に関連するもののみ)。高度でPythonに興味のある友人を歓迎します。