2013-12-08 22 views
7

Tôi đang cố gắng thiết lập ứng dụng Flask sẵn sàng cho Heroku, nhưng tôi không thể tìm ra cách bật tính năng ghi nhật ký.Ghi nhật ký bằng Flask với Foreman

Without Foreman, tôi có thể tạo ra một ứng dụng helloworld như mô tả trong Flask tutorial:

from flask import Flask 
app = Flask(__name__) 

@app.route("/") 
def hello(): 
    app.logger.debug('A value for debugging') 
    app.logger.warning('A value for warning') 
    return "Hello World!" 

if __name__ == "__main__": 
    app.run(debug=True) 

bắt đầu nó như vậy:

python hello.py 

và có đăng nhập vào thiết bị xuất chuẩn.

Khi tôi làm theo các Heroku tutorial, tuy nhiên, không có app.run dòng:

import os 
from flask import Flask 

app = Flask(__name__) 

@app.route('/') 
def hello(): 
    app.logger.debug('A value for debugging') 
    app.logger.warning('A value for warning') 
    return 'Hello World!' 

Và vì vậy tôi không thể tìm ra cách để chạy trong chế độ gỡ lỗi và/hoặc nhận được kết quả đăng nhập:

foreman start -p 5000 

Procfile:

web: gunicorn hello:app 

Trả lời

11

cấu hình đăng nhập mặc định cho Flask một pps là khác nhau trong gỡ lỗi so với chế độ sản xuất.

Trong ví dụ đầu tiên của bạn, bạn đang ở chế độ gỡ lỗi. Trong trường hợp này Flask định nghĩa một trình xử lý ghi nhật ký ghi lại tất cả thư có cấp độ logging.DEBUG hoặc cao hơn đến stderr.

Ví dụ thứ hai không ở chế độ gỡ lỗi. Khi chế độ gỡ lỗi không được kích hoạt Flask tạo một đối tượng logger nhưng không thêm bất kỳ trình xử lý nào vào nó, do đó không có gì được in.

Đối với Foreman và Heroku bạn cần các bản ghi sẽ được gửi đến stdout hoặc stderr, vì vậy tất cả các bạn cần làm là thêm một StreamHandler với mức độ khai thác gỗ của sự lựa chọn của bạn:

import os 
from flask import Flask 

app = Flask(__name__) 

# log to stderr 
import logging 
from logging import StreamHandler 
file_handler = StreamHandler() 
app.logger.setLevel(logging.DEBUG) # set the desired logging level here 
app.logger.addHandler(file_handler) 

@app.route('/') 
def hello(): 
    app.logger.debug('A value for debugging') 
    app.logger.warning('A value for warning') 
    return 'Hello World!' 

Ngoài ra, nếu bạn thích bạn không thể thực hiện điều này và chỉ kích hoạt chế độ gỡ lỗi cho ứng dụng Foreman/Heroku được kiểm soát, mặc dù đây không phải là điều tôi muốn giới thiệu cho một ứng dụng sản xuất:

from flask import Flask 
app = Flask(__name__) 
app.debug = True 
+0

@ Miguel- cảm ơn, nhưng điều này chỉ hoạt động ghi nhật ký mức cảnh báo. việc ghi nhật ký mức gỡ lỗi vẫn không hiển thị. Làm cách nào để chạy ứng dụng ở chế độ gỡ lỗi với Foreman? – Yarin

+0

@Yarin: Tôi đã cập nhật mã, tôi có mức ghi nhật ký được đặt trong trình xử lý, không phải trong trình ghi nhật ký cha. Tôi cũng đã thêm một đoạn mã cho bạn thấy cách thiết lập chế độ gỡ lỗi mà không cần gọi 'app.run()'. – Miguel

+0

@ Miguel- Perfect- dòng đơn 'app.debug = True' thực sự là tất cả những gì tôi cần. – Yarin

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