2017-03-14 6 views
0

私はPython 3.5でロギングモジュールを使用していますが、前回と同じように感じていますが、設定で指定された定数でロギングレベルを変更したいと思いますファイル。Python3ロギングモジュール:コンフィグレーションのロギングレベルの変数を設定

現在、私は使用しています:

logger = logging.getLogger(__name__) 
logging.basicConfig(level=logging.INFO) 
logger.setLevel(logging.INFO) 

私は、configファイルでINFO、DEBUGなどを宣言し、リテラルを使用して交換したいと思います。

my_script_config:

LOG_LEVEL = 'DEBUG' #this value to be modified by user. 

スクリプト:

import my_script_conf as msc 
SET_LEVEL = 'logging.' + msc.LOG_LEVEL 
BASIC_LEVEL = 'level=' + SET_LEVEL 

logger = logging.getLogger(__name__) 
logging.basicConfig(BASIC_LEVEL) 
logger.setLevel(SET_LEVEL) 

Pythonはこのことで怒る、私のひどいコーディング上の任意のヘルプははるかに高く評価されるだろう。どのようなルートでも同じ結果を達成するには、基本的には読み取りと使用が簡単で、外部設定ファイルに設定されたログモジュールレベルをもっとも賢明なオプションのように思えます。あなたpythonistaのは、他のアイデアを持っている可能性があります!

おかげで、フランク・

答えて

-1

私は変数でのexecを実行した後、別の変数に文字列を連結しました。

my_script_config:

LOG_LEVEL = 'DEBUG' #this value to be modified by user. 

スクリプト:

import my_script_conf as msc 
SET_LEVEL = 'logger.setLevel(' + msc.LOG_LEVEL + ') 
BASIC_LEVEL = 'logging.basicConfig(level=' + msc.LOG_LEVEL + ')' 

logger = logging.getLogger(__name__) 
exec(SET_LEVEL) 
exec(BASIC_LEVEL) 
+0

幹部は恐ろしい考えです。設定スクリプトで単にロギングをインポートし、 '' 'LOG_LEVEL = logging.DEBUG'''を使うのがよいでしょう。また、実際に文字列を使用する必要がある場合は、後で '' 'getattr(logging、msc.LOG_LEVEL)' ''を使うことができます。あなたがevalを使っているときはいつでも、あなたは何か間違っていると気付くはずです。 evalが危険な可能性があります – JonB

+0

これは、cliモジュールを使用してcliに移動して配置されました。 http://stackoverflow.com/questions/14097061/easier-way-to-enable-verbose-loggingに触発された –

関連する問題