2016-06-13 27 views
6

Mam do czynienia z problemami, w których mój serwer rzuca 500, jeśli API nie jest dostępny przez 30 minut na odcinku. Aby sprawdzić problem, muszę śledzić każde wykonane żądanie API. Używam Tornado przed Flaską. To jest mój kod do tej pory:Jak przechowywać dzienniki Tornado w pliku?

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() 

Jaki jest najbardziej efektywny sposób przechowywania logów do jakiegoś pliku?

Próbowałem to zrobić, ale to działa tylko wtedy, gdy proces wychodzi z 0:

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() 

Odpowiedz

11

Użyłeś enable_pretty_logging co jest dobre, a jeśli można zauważyć dokumentacja mówi, można przekazać w rejestratorze. Czym jest rejestrator? Okazało się, że Python ma bardzo szerokie wsparcie dla operacji rejestrowania za pomocą wbudowanego modułu logging (co jest również wspomniane w dokumentacji). Ogólnie rzecz biorąc, trzeba ustawić się koparki, które piszą do jakiegoś konkretnego pliku, który można zrobić

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

to będzie rejestrować wszystkie wpisy poziom INFO (lub nowszy) do pliku. Te rejestratory mogą być zbierane przez funkcję logging.getLogger i można wyraźnie zaznaczyć je zgodnie z dokumentacją tornado przez

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

Wystarczy dołączyć swoją obsługi do rejestratora, która generuje wiadomości, które chcesz się zalogować do pliku. Jeśli jest to tornado.application generowania wiadomości chcesz zobaczyć

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

Albo można też korzystać z wbudowanych opcji tornado, które umożliwiają to

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

Dzięki tak dużo! Wbudowane opcje tornado całkowicie działały. – 90abyss