2016-09-30 13 views
3

効率を上げるためにマルチプロセッシングを使用するPythonプログラムと、プロセスごとにロガーを作成する関数があります。ロガー機能は、次のようになります。PythonロギングsetLevel()が有効になっていません

import logging 
import os 

def create_logger(app_name): 
    """Create a logging interface""" 
    # create a logger 
    if logging in os.environ: 
     logging_string = os.environ["logging"] 
     if logging_string == "DEBUG": 
      logging_level = loggin.DEBUG 
     else if logging_string == "INFO": 
      logging_level = logging.INFO 
     else if logging_string == "WARNING": 
      logging_level = logging.WARNING 
     else if logging_string == "ERROR": 
      logging_level = logging.ERROR 
     else if logging_string == "CRITICAL": 
      logging_level = logging.CRITICAL 
    else: 
     logging_level = logging.INFO 

    logger = logging.getLogger(app_name) 
    logger.setLevel(logging_level) 

    # Console handler for error output 
    console_handler = logging.StreamHandler() 
    console_handler.setLevel(logging_level) 

    # Formatter to make everything look nice 
    formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') 
    console_handler.setFormatter(formatter) 

    # Add the handlers to the logger 
    logger.addHandler(console_handler) 

    return logger 

そして、私の処理機能は、次のようになります。しかし、関係なく、ロギング環境変数に設定されているもの、私はまだでデバッグログメッセージを受信しない

import custom_logging 

def do_capture(data_dict_access): 
    """Process data""" 

    # Custom logging 
    LOGGER = custom_logging.create_logger("processor") 

    LOGGER.debug("Doing stuff...") 

コンソール。なぜ私のログレベルが有効にならないのですか?setLevel()を呼び出すと、デバッグメッセージは記録されなくなります。ここで

+0

まず: '他if'があるべき' –

+0

は@HaiVu奇妙な、私はそれから構文エラーが届かないelif'。とにかく変更されましたが、まだ違いはありません – CyberJacob

+0

私は解決策を投稿しましたが、あなたのコードがなぜ機能しないのか解明しようとしています。 –

答えて

3

はロガーオブジェクトを作成する簡単な方法です:

import logging 
import os 

def create_logger(app_name): 
    """Create a logging interface""" 
    logging_level = os.getenv('logging', logging.INFO) 
    logging.basicConfig(
     level=logging_level, 
     format='%(asctime)s - %(name)s - %(levelname)s - %(message)s') 
    logger = logging.getLogger(app_name) 
    return logger 

ディスカッション

  • logging.DEBUG「DEBUG」から変換する必要はありません、loggingモジュールは、これらの文字列を理解します。
  • basicConfigを使用すると、ロガーの設定の苦労を緩和できます。ハンドラを作成したり、フォーマットを設定したり、レベルを設定したりする必要はありません。これはほとんどの場合に有効です。

更新

あなたのコードが動作しない理由を私はelse ifほか、分かりました。あなたのラインを考えてみましょう:引用符なしの

このライン loggging
if logging in os.environ: 

loggingライブラリパッケージを指します。何が欲しいのです:すべての

if 'logging' in os.environ: 
+0

私はロギングが文字列を認識することに気づいていませんでしたが、それは非常に便利です。不足している引用が問題を引き起こしたものになり、それを修正して追加します。 – CyberJacob

関連する問題