2016-08-30 3 views
0

辞書ベースのロギング設定をコーディングしようとしていて、プログラムを実行するときに発生するValueErrorによって困惑しています。私は本質的にそれを取り除き、問題は残っています。私は3.5文書、HOWTOのロギング、Cookbookの記録などを読んだことがありますが、残念ながら解決策は提示されていません。どんな助けもありがとう。辞書ベースのロギング設定を試行中にPython ValueErrorが発生する

また、私はPythonにわずか3週間しかないので、この時点で私はちょうど私の奥行きから外れるかもしれません。

ValueError was unhandled by user code 
Message: Unable to configure logger 'handlers': 'ConvertingList' object has no attribute 'get' 

または時々この...

ValueError was unhandled by user code 
Message: Unable to configure logger 'level': 'str' object has no attribute 'get' 

私は別のエラーがなければならないかもしれないことを疑う:実行は、私がフォローを受信するとここでは、コード...

import logging.config 

log_config = { 
    'version': 1, 
    'disable_existing_loggers': False, 
    'formatters':{ 
     'verbose_formatter':{ 
      'format':'%(levelname)s: %(name)s: %(asctime)s.%(msecs).03d : '\ 
      '%(message)s: %(process)s: %(processName)s', 
      'datefmt':'%Y-%m-%d %H:%M:%S' 
     }, 
     'precise_formatter':{ 
      'format':'%(levelname)s: %(name)s: %(asctime)s.%(msecs).03d : '\ 
      '%(message)s', 
      'datefmt':'%Y-%m-%d %H:%M:%S' 
     }, 
     'brief_formatter':{ 
      'format':'%(levelname)s: %(message)s' 
     } 
    }, 
    'handlers':{ 
     'con_handler':{ 
      'class':'logging.StreamHandler', 
      'level':'DEBUG', 
      'formatter':'precise_formatter', 
      'stream':'ext://sys.stdout' 
     }, 
     'file_handler':{ 
      'class':'logging.handlers.RotatingFileHandler', 
      'filename':'logger.log', 
      'maxBytes':1048576, 
      'backupCount':4, 
      'level':'DEBUG', 
      'formatter':'precise_formatter', 
      'encoding':'utf8' 
     } 
    }, 
    'loggers':{ 
     'level':'DEBUG', 
     'handlers':['con_handler', 'file_handler'] 
    } 
} 

logging.config.dictConfig(log_config) 
logger = logging.getLogger(__name__) 
logger.critical('This should always be seen!') 

です辞書の時々変わる順序で行うのですか?

+0

だけで推測しますが、 'として代わりにdictsの辞書のdictsのリストを指定してみてくださいハンドラーの価値。ロガーのように聞こえますが、辞書キーを取得して「取得」を呼び出そうとしています。それをdictsのリストに変更すると、代わりにdictが得られ、このdictは 'get'属性を持ちます。 – bananafish

答えて

0

変更

'loggers':{ 
    '': { 
     'level':'DEBUG', 
     'handlers':['con_handler', 'file_handler'] 
     } 
} 

''(空文字列)にロガー部はルートロガーを指します。あなたは、さまざまなコンポーネントのためのより多くのロガーを追加することができます。

'loggers':{ 
    '': { 
     'level':'DEBUG', 
     'handlers':['con_handler', 'file_handler'] 
     } 
    'bottle': { #I only want error level from bottle :) 
     'level':'ERROR', 
     'handlers':['con_handler', 'file_handler'] 
     } 
} 
+0

ありがとうございます。これは私のために働いた。 ここでは、ロギングドキュメント、ハウツー&クックブックに示されている例のように、何も見つからない(ルートロガーを参照している空の文字列)が見つからないと困惑しています。私は(決して良いアイデアはないと思いますか?)これは私があまりにも新しくて明瞭に見ることができない状態に過ぎないと思います。 – Babaghanoush

+0

@Babaghanoush - 通常は、名前で必要なロガーを設定する必要があるので、ルートロガーを設定しないでください –

0

rootロガーがあなたのlog_config辞書のrootキーを使用する設定へ。

ルート - ルートロガーの設定になります。

出典:Dictionary Schema Details

この説明に続いて、あなたの設定は次のようになります。

log_config = { 

    ... 
    'handlers': { 
     'con_handler': ..., 
     'file_handler': ... 
    }, 
    'loggers': { 
     'other_logger': ... 
    }, 
    'root': { 
     'level': 'DEBUG', 
     'handlers': ['con_handler', 'file_handler'] 
    } 
} 
関連する問題