2013-02-15 19 views
45

Tôi có một máy chủ Flask đang chạy ở chế độ độc lập (sử dụng app.run()). Nhưng, tôi không muốn bất kỳ thư nào trong bảng điều khiển, nhưVô hiệu hóa các thông báo bàn điều khiển trong máy chủ Flask

127.0.0.1 - - [15/Feb/2013 10:52:22] "GET /index.html HTTP/1.1" 200 - 
... 

Làm cách nào để tắt chế độ tiết kiệm?

+0

Tôi có thể hỏi tại sao * * bạn không muốn các bản ghi yêu cầu HTTP?! .. –

+0

@DemianBrecht Tôi sẽ bắt đầu làm chủ đề trong ứng dụng chính của mình và không muốn những điều này làm rối tung các thư khác của tôi . – ATOzTOA

+0

Vì vậy, bây giờ bạn có một ứng dụng khởi động chủ đề (đủ khó để gỡ lỗi chính mình) và bây giờ bạn sẽ ngăn chặn đăng nhập vào * đầu * của điều đó? Eesh, nghe có vẻ như ngược lại với những gì tôi sẽ làm .. Bạn càng ghi nhật ký càng tốt (rõ ràng miễn là nó có liên quan;)). –

Trả lời

67

Bạn có thể thiết lập mức độ tập hợp các logger Werkzeug LỖI, trong trường hợp đó chỉ lỗi được ghi lại:

import logging 
log = logging.getLogger('werkzeug') 
log.setLevel(logging.ERROR) 

Dưới đây là một đầy đủ làm việc ví dụ testet trên OSX, Python 2.7.5, Flask 0.10.0 :

from flask import Flask 
app = Flask(__name__) 

import logging 
log = logging.getLogger('werkzeug') 
log.setLevel(logging.ERROR) 

@app.route("/") 
def hello(): 
    return "Hello World!" 

if __name__ == "__main__": 
    app.run() 
+10

Không hoạt động đối với tôi. –

+6

Điều này dường như không ngăn các nhật ký HTTP bị lỗi; Nó dừng thông báo "bắt đầu" (trong đó rõ ràng có tên mô-đun "werkzeug" ở định dạng nhật ký ". – rsb

+1

Làm việc cho tôi. Các thông báo gỡ lỗi yêu cầu bị chặn. Sử dụng Python 3.5.2, Flask 0.12 và Werkzeug 0.11.11 – user3469861

5

Lý do khác bạn có thể muốn thay đổi kết quả ghi nhật ký là dành cho kiểm tra và chuyển hướng nhật ký máy chủ tới tệp nhật ký.

Tôi không thể nhận được đề xuất ở trên để hoạt động, có vẻ như bộ ghi nhật ký được thiết lập như là một phần của ứng dụng bắt đầu. Tôi đã có thể làm cho nó làm việc bằng cách thay đổi các mức log sau bắt đầu ứng dụng:

... (in setUpClass) 
server = Thread(target=lambda: app.run(host=hostname, port=port, threaded=True)) 
server.daemon = True 
server.start() 
wait_for_boot(hostname, port) # curls a health check endpoint 

log_names = ['werkzeug'] 
app_logs = map(lambda logname: logging.getLogger(logname), log_names) 
file_handler = logging.FileHandler('log/app.test.log', 'w') 

for app_log in app_logs: 
    for hdlr in app_log.handlers[:]: # remove all old handlers 
     app_log.removeHandler(hdlr) 

    app_log.addHandler(file_handler) 

Thật không may là * Running on localhost:9151 và kiểm tra sức khỏe đầu tiên vẫn còn in tiêu chuẩn ra ngoài, nhưng khi chạy nhiều thử nghiệm nó dọn dẹp sản lượng một tấn.

"Vậy tại sao log_names?", Bạn hỏi. Trong trường hợp của tôi có một số bản ghi phụ tôi cần để loại bỏ. Tôi đã có thể tìm thấy trong đó Loggers để thêm vào log_names qua:

from flask import Flask 
app = Flask(__name__) 

import logging 
print(logging.Logger.manager.loggerDict) 

Side lưu ý: Nó sẽ được tốt đẹp nếu có một flaskapp.getLogger() hoặc một cái gì đó vì vậy đây là mạnh mẽ hơn trên các phiên bản. Bất kỳ ý tưởng?

lời Một số quan trọng hơn: bình kiểm tra log remove stdout đầu ra

nhờ:

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