これはどのように動作するかを理解するためにはPython Logging HOWTOを調べるべきでしょう。
要するに、そのモジュールは通常、G_LOG = logging.getLogger('package.name')
の形式のロガーを取得し、メッセージをロガーに送信します:G_LOG.info('some message'), G_LOG.exception('something bad happened')
。モジュールは通常、何も構成しません。
モジュールは、上のログを有効にしてロガー名に基づいてハンドラを設定することができます使用するアプリケーション:
- は、すべてのメッセージを聞く、または
- が一定の閾値以上のメッセージのみを聞く、または
- など、唯一の名前が
package
で始まる、または
- だけ名前がwoth
package.name
を開始ロガーからのメッセージを聞くロガーからのメッセージを聞く
最も簡単な方法は、アプリケーションの最初のどこかにlogging.basicConfigてロギングを設定することです:
logging.basicConfig(level=logging.DEBUG,
format='%(asctime)s %(levelname)-8s %(message)s',
datefmt='%Y-%m-%d %H:%M:%S',
filename=log_file, filemode='a')
その方法は、あなたがlog_file
にすべてのモジュールからすべてのログメッセージを書き込みます。
あなたが(別のファイルに異なるロガーからログを置く、または別のファイルにスタックトレースを送信する)、より詳細なログ戦略を必要とする場合は、ログの設定ファイルを定義し、logging.config.dictConfigまたはlogging.config.fileConfig
を使用してロギングを設定することをお勧めします。
P.S. G_LOG
へ
G_LOG = logging.getLogger(__name__)
ST_LOG = logging.getLogger('stacktrace.' + __name__)
は、私が唯一の1行のメッセージを送信:私は通常、モジュール変数として2つのロガーを作成します。 ST_LOG
へ私は暗黙的にexc_info=True
を持つST_LOG.exception
を使用して重要なメッセージを複製し、現在の例外のスタックトレースを書き込みます。
アプリケーションの開始時に、stacktrace
で始まり、propagate=0
で始まるメッセージを受信する(つまり、スタックトレースメッセージが上部に表示されない)2つのロガー(2つのファイルハンドラ)残りのメッセージを処理するルートロガーがあります。私は完全なログ設定ファイルをここには載せません。それは、それがどのように動作するのかを理解するのに便利なホーム作業です。
ここにあるstacktraceのアイデアが大好きですが、私はあなたの "完全なログ設定ファイルをここに入れません"というのは嫌いです。私はほぼ10年間python devをやってきたが、ドキュメンテーションがひどいので、非常に貧弱なログを残している。 1年に数回、私は何か良いものを見つけることに全仕事日を投資します。私はたいてい過去にやったことをあきらめて解決します。 –
@BrunoBronosky、おそらく、あなたは正しいです。いい考えだね。 – newtover