2016-06-13 26 views
6

Tôi đã gặp phải sự cố khi máy chủ của tôi đang ném 500 nếu API không được truy cập trong 30 phút. Để kiểm tra vấn đề, tôi cần phải theo dõi mọi yêu cầu API được thực hiện. Tôi đang sử dụng Tornado trước mặt Flask. Đây là mã của tôi cho đến thời điểm này:Làm thế nào để lưu trữ các bản ghi Tornado vào một tệp?

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

Whats cách hiệu quả nhất để lưu trữ nhật ký vào một tệp nào đó?

tôi đã cố gắng làm điều này nhưng nó chỉ hoạt động khi quá trình thoát với 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() 

Trả lời

11

Bạn đã sử dụng enable_pretty_logging đó là tốt, và nếu bạn có thể lưu ý các tài liệu nói rằng bạn có thể vượt qua trong một logger. Vậy logger là gì? Hóa ra Python có sự hỗ trợ rất rộng rãi cho các hành động ghi nhật ký thông qua mô-đun logging được xây dựng (cũng được đề cập trong tài liệu). Nói chung, bạn cần thiết lập trình xử lý ghi vào một số tệp cụ thể mà bạn có thể thực hiện bằng cách

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

Thao tác này sẽ ghi lại tất cả các mục nhập thông tin (hoặc cao hơn) vào tệp. Những người khai thác gỗ có thể được thu thập bởi các logging.getLogger chức năng, và bạn rõ ràng có thể chọn các theo các tài liệu lốc xoáy bởi

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

Đơn giản chỉ cần thêm điều khiển của bạn đến logger được tạo ra thông điệp bạn muốn đăng nhập vào một tập tin. Nếu đó là tornado.application tạo ra những thông điệp bạn muốn xem

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

Hoặc bạn cũng có thể sử dụng các tùy chọn cơn lốc xoáy dựng sẵn cho phép này

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

Cảm ơn rất nhiều! Builtin lốc xoáy tùy chọn hoàn toàn làm việc. – 90abyss

Các vấn đề liên quan