2011-07-11 3 views
14

私はPythonでloggingモジュールを使用して、デバッグとエラーメッセージを書き込みます。ファイルハンドラのロギングレベルとPythonでの表示

logging.DEBUG以上のすべてのメッセージをファイルに書きたいと思います。

しかし、私はlogging.WARNING以上のメッセージしか印刷しません。

LoggerFileHandlerの1つを使用すれば可能ですか?

答えて

12

ハンドラは簡単に作成して追加することができるので、2つのハンドラを使用する方が良いでしょう。しかし、何らかの理由で1つに固執したい場合は、Python logging cookbookには、コンソールとファイルの両方にロギングすることができますが、さまざまなレベルでロギングすることができます。 )。これは、しかし、単一StreamHandlerなくFileHandler以外でそれを行います

import logging 

# set up logging to file - see previous section for more details 
logging.basicConfig(level=logging.DEBUG, 
        format='%(asctime)s %(name)-12s %(levelname)-8s %(message)s', 
        datefmt='%m-%d %H:%M', 
        filename='/temp/myapp.log', 
        filemode='w') 
# define a Handler which writes INFO messages or higher to the sys.stderr 
console = logging.StreamHandler() 
console.setLevel(logging.INFO) 
# set a format which is simpler for console use 
formatter = logging.Formatter('%(name)-12s: %(levelname)-8s %(message)s') 
# tell the handler to use this format 
console.setFormatter(formatter) 
# add the handler to the root logger 
logging.getLogger('').addHandler(console) 

# Now, we can log to the root logger, or any other logger. First the root... 
logging.info('Jackdaws love my big sphinx of quartz.') 

# Now, define a couple of other loggers which might represent areas in your 
# application: 

logger1 = logging.getLogger('myapp.area1') 
logger2 = logging.getLogger('myapp.area2') 

logger1.debug('Quick zephyrs blow, vexing daft Jim.') 
logger1.info('How quickly daft jumping zebras vex.') 
logger2.warning('Jail zesty vixen who grabbed pay from quack.') 
logger2.error('The five boxing wizards jump quickly.') 

編集:(このコードは依然として2つのハンドラを生成したコメントで説明したが、一の構成にbasicConfigの使用を介して「隠し」という) 。両方を明示的に作成することを強くお勧めします。

+0

これはまだ2つのハンドラです。あなただけが 'FileHandler'の作成を' basicConfig(...) 'でマスクしましたが、どちらも明示的に作成したいと思います。 – plundra

+0

あなたはもちろんそうです。しかし、私はこれを似たように思っていましたが、1つのロガーだけで2​​箇所に出力していると言いました。私はあなたの他の点でもあなたに同意する必要があります:それは明確に両方のハンドラを明示的にIMO宣言するためにはっきりと明瞭です。 – bdeniker

2

いいえファイルとスクリーン出力は、2つのハンドラが必要であることを意味します。

+0

1つのハンドラでは、現在、ファイルと画面の両方に書き込んでいます。しかし、両方とも同じレベル(logging.DEBUG)です。 – cssndrx

+0

@cssndrx: "1つのハンドラで、現在ファイルと画面の両方に書き込んでいます。"私はそれが理解しにくいことがわかります。 **これを実現するために使用しているロギング設定を含めるために**質問を**更新してください。 –

+0

@eryksun:多くのことを「行うことができます」。実際に何をしているのかを確認する必要があります。 –

関連する問題