2016-06-13 13 views
6

私は、APIが一気に30分間アクセスされないと、私のサーバが500を投げている問題に直面していました。問題を確認するために、私はすべてのAPIリクエストを追跡する必要があります。私はフラスコの前でトルネードを使用しています。これは、これまでの私のコードです:Tornadoログをファイルに保存する方法は?

import tornado.httpserver 
import tornado.ioloop 
import tornado.web 
from flasky import app 
from tornado.wsgi import WSGIContainer 
from tornado.ioloop import IOLoop 
from tornado.web import FallbackHandler 

from tornado.log import enable_pretty_logging 
enable_pretty_logging() 


tr = WSGIContainer(app) 

application = tornado.web.Application([ 
    (r".*", FallbackHandler, dict(fallback=tr)), 
]) 

if __name__ == '__main__': 
    application.listen(5000) 
    IOLoop.instance().start() 

いただきましたいくつかのファイルにログを保存するための最も効率的な方法はありますか?

は、私はこれをやってみましたが、プロセスは0で終了したときにのみ動作します:あなたは良いです enable_pretty_loggingを使用していた

import sys 
import time 
timestr = time.strftime("%Y%m%d-%H%M%S") 
filename = "C:/Source/logs/" + timestr + ".log" 

class Logger(object): 
    def __init__(self): 
     self.terminal = sys.stdout 
     self.log = open(filename, "a") 

    def write(self, message): 
     self.terminal.write(message) 
     self.log.write(message) 

    def flush(self): 
     pass 

sys.stdout = Logger() 

答えて

11

、あなたが注意する可能性がある場合ドキュメントでは、ロガーに渡すことができます述べています。では、ロガーとは何ですか? Pythonは、組み込みのloggingモジュール(これは文書にも記載されています)を使ってアクションを記録するための非常に広範なサポートをしています。一般的に、あなたはファイルにすべての情報のレベルのエントリ(またはそれ以上)を記録します

handler = logging.FileHandler(log_file_filename) 
logger.addHandler(handler) 
logger.setLevel(logging.INFO) 
logger.info('foo') 

これによって行うことができますいくつかの特定のファイルに書き込むハンドラを設定する必要があります。これらのロガーはlogging.getLogger機能によって収集することができ、あなたが明示的に単にあなたがファイルにログを記録するメッセージを生成しているロガーにハンドラを追加

access_log = logging.getLogger("tornado.access") 
app_log = logging.getLogger("tornado.application") 
gen_log = logging.getLogger("tornado.general") 

で竜巻のドキュメントごとにこれらを選択することができます。それは、メッセージを生成tornado.applicationをだ場合は、

handler = logging.FileHandler(log_file_filename) 
app_log = logging.getLogger("tornado.application") 
enable_pretty_logging() 
app_log.addHandler(handler) 

を表示するかもそんなにこの

tornado.options.options['log_file_prefix'].set(log_file_prefix) 
tornado.options.parse_command_line() 
+0

感謝を有効に組み込み竜巻のオプションを使用することができます!内蔵の竜巻オプションは完全に機能しました。 – 90abyss

関連する問題