形式のログメッセージを処理することができない私は、ルートロガーに追加した私のpythonフラスコアプリケーション、カスタムフォーマッタを持っている:私がしたいときカスタムフォーマッタは
logger = logging.getLogger()
logger.setLevel(logging.INFO)
handler = logging.StreamHandler()
handler.setLevel(logging.INFO)
formatter = CustomLoggingFormatter()
handler.setFormatter(formatter)
logger.addHandler(handler)
これは完全に正常に動作します何かをログに記録する(logger.info()...)が、ライブラリのログに問題があります。 uwsgi。ここ
は、ログメッセージの例である:
{ "@timestamp": "2017-09-25T06:57:45.373Z"、 "レベル": "INFO"、 "メッセージ" : は "*%sの上で実行://%sの:%D /%sの"}
私は何かが私のフォーマッタと間違っていたかもしれないと思ったが、私はLogRecordのをログインしたときに見えた私のCustomLoggingFormatterのreceivs、上記の行のように:
たLogRecord: "://%sは%D /%S%Sに*実行" WERKZEUG、20、< ...>/libに/ python3.5 /のsite-packages/WERKZEUG/_internal.py、87、ここで
は私CustomLoggingFormatterです:仕事に私のフォーマッタについては
class CustomLoggingFormatter(Formatter):
data = {}
def __init__(self):
super(CustomLoggingFormatter, self).__init__()
def format(self, record):
print(record)
input_data = {}
input_data['@timestamp'] = datetime.utcnow().isoformat()[:-3] + 'Z'
input_data['level'] = record.levelname
if record.msg:
input_data['message'] = record.msg
input_data.update(self.data)
return json.dumps(input_data)
、しかし起こらないいくつかのライブラリのため、文字列の書式は、最初に解決しなければならないようです。この問題を解決する方法を知っている人は誰ですか?
カスタムコードを表示してください。 'Formatter.format()'は常に 'LogRecord'インスタンスを扱わなければなりません。デフォルトの実装では、 '(一般的に辞書として' VARS(レコード)を使用しています ')実際の書式設定を処理するために)' Formatter.formatMessage(呼び出します。フォーマッタの実装は、あなたは、Pythonのバージョンを実行している、Pythonのバージョン間のビットを変更したので –
は私のCustomLoggingFormatter :) – user16655
を追加しましたか? –