2014-01-20 13 views
8

をstderrにログを無効:Pythonのトルネード - 私は最小限のトルネードアプリケーションを持っている

WARNING:tornado.access:404 GET/(127.0.0.1) 0.79ms 

質問:それはエラーをログに記録しないようにしたい

import tornado.ioloop 
import tornado.web 

class PingHandler(tornado.web.RequestHandler): 
    def get(self): 
     self.write("pong\n") 

if __name__ == "__main__": 
    application = tornado.web.Application([ ("/ping", PingHandler), ]) 
    application.listen(8888) 
    tornado.ioloop.IOLoop.instance().start() 

トルネードはstderrにエラー要求を報告し続けますメッセージ。どうやって?

トルネードバージョン3.1; Python 2.6

答えて

12

Tornadoを起動すると、「誰か」がロギングサブシステムを初期化していることが明らかです。ここで謎を明らかにしioloop.pyからのコードは次のとおりです。

def start(self): 
    if not logging.getLogger().handlers: 
     # The IOLoop catches and logs exceptions, so it's 
     # important that log output be visible. However, python's 
     # default behavior for non-root loggers (prior to python 
     # 3.2) is to print an unhelpful "no handlers could be 
     # found" message rather than the actual log entry, so we 
     # must explicitly configure logging if we've made it this 
     # far without anything. 
     logging.basicConfig() 

basicConfigが呼び出され、デフォルトstderrハンドラを設定しています。

のでtonadoアクセスするための設定の適切なログに、以下を行う必要があります。logging.getLogger("tornado.access").propagate = False:上記ロガーのlogging.getLogger("tornado.access").addHandler(...)

  • 無効に伝播:

    1. tornado.accessロガーにハンドラを追加します。そうしないとのメッセージがあなたのハンドラにとstderr

  • 11

    にBOTH到着する前の回答は正しいが、少し不完全でした。これはNullHandlerにすべてを送信します:

    hn = logging.NullHandler() 
    hn.setLevel(logging.DEBUG) 
    logging.getLogger("tornado.access").addHandler(hn) 
    logging.getLogger("tornado.access").propagate = False 
    
    3

    また、非常に単純に(1行で)行うことができます:

    logging.getLogger('tornado.access').disabled = True 
    
    関連する問題