2017-11-21 14 views
0

yamlを使用してPythonアプリケーションのログ記録を設定しています。モジュールdb_opsINFOがDEBUGログに記録される理由

version: 1 
disable_existing_loggers: False 

formatters: 
    standard: 
     format: "%(asctime)s - %(name)s - %(levelname)s - %(message)s" 

handlers: 
    console: 
     class: logging.StreamHandler 
     level: DEBUG 
     formatter: standard 
     stream: ext://sys.stdout 

    info_file_handler: 
     class: logging.handlers.RotatingFileHandler 
     level: INFO 
     formatter: standard 
     filename: info.log 
     maxBytes: 10485760 # 10MB 
     backupCount: 20 
     encoding: utf8 

    error_file_handler: 
     class: logging.handlers.RotatingFileHandler 
     level: ERROR 
     formatter: standard 
     filename: errors.log 
     maxBytes: 10485760 # 10MB 
     backupCount: 20 
     encoding: utf8 

    debug_file_handler: 
     class: logging.handlers.RotatingFileHandler 
     level: DEBUG 
     formatter: standard 
     filename: debug.log 
     maxBytes: 10485760 # 10MB 
     backupCount: 20 
     encoding: utf8 

loggers: 
     db_ops: 
     level: DEBUG 
     handlers: [info_file_handler, error_file_handler, debug_file_handler] 
     propagate: true 

、Iは、ログの異なるレベルのlogger.infologger.debugの両方を使用します。私がアプリを実行すると、INFOがinfo.logに出力されましたが、INFODEBUGの両方のメッセージがdebug.logに出力されます。

レベルに基づいてログを別のファイルに分割する正しい方法は何ですか?

答えて

3

pythonロガーとハンドラのレベルは、しきい値です。あなたのレベルをDEBUGと指定すると、以上がDEBUG以上のものが記録されます。

DEBUGロギングのみを使用する場合は、DEBUGメッセージ以外のものをフィルタリングするフィルタをさらに割り当てる必要があります。

+0

だから、すべてのレベルの出力を同じファイルにする方がよいでしょう。あなたは別のファイルに冗長ログを取得しないように? – ddd

+0

これは本当にログをどのように利用するかによって異なります。ローカル開発のためにDEBUGレベルを使用可能にするのは一般的なパターンですが、INFO以上を本番環境に設定してノイズレベルを低減し、重要なログのみ(通常は問題)を持ちます。 しかし、それ以外の場合は、ログのニーズが異なる場合があります。たとえば、エラーをstderrに、標準出力をstdoutに出力することができます。それについての厳しい規則はありません。 あなたの場合は、同じ宛先にすべてをロギングするだけでうまくいくように思えます。 – m1keil

関連する問題