2016-06-13 18 views
6

API'mn bir streçte 30 dakika boyunca erişilmemiş olması durumunda sunucumun 500 attığı sorunlar ile karşı karşıya kaldım. Sorunu kontrol etmek için, yapılan her bir API isteğinin kaydını tutmam gerekiyor. Flask'ın önünde Tornado kullanıyorum. Bu, şu ana kadar benim kodum:Tornado günlükleri bir dosyada nasıl depolanır?

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

Günlükleri bir dosyada depolamanın en etkili yolu nedir?

bunu yaparken denedim ama süreç 0 ile çıktığında sadece çalışır: Sen iyidir enable_pretty_logging kullandık

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

cevap

11

ve not olabilir eğer dokümantasyon bir logger geçebilir diyor. Öyleyse logger nedir? Python'un, yerleşik logging modülünden (belgelerinde de belirtildiği gibi) oturum açma işlemleri için çok kapsamlı bir desteği vardır. Genellikle, sen dosyasına tüm bilgi seviyesi girişleri (veya üstü) günlüğe kaydeder

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

Bu tarafından yapabileceğiniz bazı spesifik dosyaya yazma işleyicileri kurmak gerekir. Bu kaydediciler logging.getLogger işlevi tarafından toplanan edilebilir ve açıkça Basitçe bir dosyaya oturum istediğiniz mesajları oluşturuyor kaydedici için işleyicisi ekler

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

tarafından kasırga belgelendirmesi olarak bu seçebilirsiniz. iletileri üreten tornado.application buysa sen

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

görmek istiyorum Ya da o kadar bu

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

Teşekkür sağlayan yerleşik tornado seçeneklerini kullanabilirsiniz! Yerleşik kasırga seçenekleri tamamen işe yaradı. – 90abyss