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ờ:
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?! .. –
@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
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;)). –