python logging
システムを使用するコードを書いています。LOG
がまだ存在しない場合、ログを作成しますが、次にログを取得し、そのファイルへのロギングを再開します。これが私のコードです。
import logging
import os
log_filename='Transactions.log')
if os.path.isfile(log_filename)!=True:
LOG = logging.getLogger('log_filename')
LOG.setLevel(logging.DEBUG)
# create file handler which logs even debug messages
fh = logging.FileHandler('log_filename')
fh.setLevel(logging.DEBUG)
# create console handler with a higher log level
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)
# create formatter and add it to the handlers
formatter = logging.Formatter('-->%(asctime)s - %(name)s:%(levelname)s - %(message)s')
fh.setFormatter(formatter)
ch.setFormatter(formatter)
# add the handlers to the logger
LOG.addHandler(fh)
LOG.addHandler(ch)
else:
LOG=logging.getLogger()
問題はelse
ブロックにあると思われますが、修正方法がわかりません。誰もがこの状況にいくつかの光を当てることができますか?.
ロギングモジュールのFileHandler
がそれを処理します。複雑にする必要はありません。
ハンドラーはオプションのmode
パラメーターを受け取り、データの書き込みを開始するか、データの追加を開始するかを指定します。
the docs から:
class logging.FileHandler(filename, mode='a', encoding=None, delay=False)
指定されたファイルが開かれ、ロギングのストリームとして使用されます。
mode
が指定されていない場合、'a'
使用されている。
@mightypileが言及したように、logs/mylogfile.log
のような新しいディレクトリ構造を作成しようとした人にとっては、FileHandlerは新しいディレクトリ構造を作成しません。ディレクトリ構造を確保するためにos.makedirs
を使用しました。
import os
import logging
log_filename = "logs/output.log"
os.makedirs(os.path.dirname(log_filename), exist_ok=True)
file_handler = logging.FileHandler(output_filename, mode="w", encoding=None, delay=False)
あなたが走るとき
LOG = logging.getLogger('log_filename')
初めてグローバル変数が作成されます。したがって、次のコードを上記のスクリプトに追加することもできます。
global LOG
if LOG is not None:
print("found logger !")
else:
("no global variable logger found")