Flask 서버에서 콘솔 메시지 사용 안 함
서버를 모드 사용)로 .app.run()
하지만 콘솔에 다음과 같은 메시지가 표시되는 것은 원치 않습니다.
127.0.0.1 - - [15/Feb/2013 10:52:22] "GET /index.html HTTP/1.1" 200 -
...
상세 모드를 비활성화하려면 어떻게 해야 합니까?
Werkzeug 로거의 레벨을 ERROR로 설정할 수 있습니다. 이 경우 오류만 기록됩니다.
import logging
log = logging.getLogger('werkzeug')
log.setLevel(logging.ERROR)
다음은 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()
수 이 솔 사 자 가 은 션 루 을 물 추 고 가 크 니 합 다 능 같 이 다 로 과 없 정 음 도 이 의 수 그 준 보 쌓 스 플 을 만 라 을 적 용 져 오 쇄 수 제 공 하 법 지 자 는 있 신 을 의 방 인 127.0.0.1 - - [15/Feb/2013 10:52:22] "GET /index.html HTTP/1.1" 200
from flask import Flask
import logging
app = Flask(__name__)
log = logging.getLogger('werkzeug')
log.disabled = True
다른 답들은 모두 제게 맞지 않았지만, 저는 피터의 의견을 바탕으로 해결책을 찾았습니다.플라스크는 더 이상 사용하지 않습니다.logging
클릭 패키지로 전환되었습니다.재정의함으로써click.echo
그리고.click.secho
메시지를 크시메의시삭제다니습했를에서 했습니다.app.run()
.
import logging
import click
from flask import Flask
app = Flask(__name__)
log = logging.getLogger('werkzeug')
log.setLevel(logging.ERROR)
def secho(text, file=None, nl=None, err=None, color=None, **styles):
pass
def echo(text, file=None, nl=None, err=None, color=None, **styles):
pass
click.echo = echo
click.secho = secho
@app.route("/")
def hello():
return "Hello World!"
if __name__ == "__main__":
app.run()
을 " " " " 로 ERROR
그리고 빈 함수로 클릭 메서드를 재정의하면 모든 비오류 로그 출력을 방지해야 합니다.
억제하기Serving Flask app ...
:
os.environ['WERKZEUG_RUN_MAIN'] = 'true'
app.run()
WSGI 서버를 사용하는 경우 로그를 없음으로 설정하십시오.
gevent_server = gevent.pywsgi.WSGIServer(("0.0.0.0", 8080), app, log=None)
@Drewes 솔루션은 대부분 작동하지만 경우에 따라 werkzeug 로그가 생성되는 경향이 있습니다.만약 정말로 그들 중 누구도 보고 싶지 않다면, 저는 그렇게 그것을 비활성화하는 것을 제안합니다.
from flask import Flask
import logging
app = Flask(__name__)
log = logging.getLogger('werkzeug')
log.disabled = True
app.logger.disabled = True
나에게 그것은 실패했습니다.abort(500)
제기되었습니다.
MESSAGE(각자 및 모든 콘솔 메시지)를.abort(...)
오류).
import os
import logging
logging.getLogger('werkzeug').disabled = True
os.environ['WERKZEUG_RUN_MAIN'] = 'true'
이것은 기본적으로 Slava V와 Tom Wojcik이 제시한 답변의 조합입니다.
로그 출력을 변경하려는 또 다른 이유는 테스트를 위해 서버 로그를 로그 파일로 리디렉션하기 위해서입니다.
위의 제안도 작동하지 않았습니다. 앱 시작의 일부로 로거가 설정된 것 같습니다.앱을 시작한 후 로그 레벨을 변경하여 작동할 수 있었습니다.
... (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)
도 불하게그도행그▁unfortun도.* Running on localhost:9151
그리고 첫 번째 건강 점검은 여전히 표준화된 상태로 인쇄되지만, 많은 테스트를 실행할 때는 출력이 엄청나게 깨끗해집니다.
왜 "그럼왜?"?"log_names
당신이 묻습니다.제 경우에는 제가 제거해야 할 여분의 통나무가 몇 개 있었습니다.다음을 통해 log_names에 추가할 로거를 찾을 수 있었습니다.
from flask import Flask
app = Flask(__name__)
import logging
print(logging.Logger.manager.loggerDict)
참고 사항:플라스크앱.getLogger()나 다른 것이 있으면 좋을 것입니다. 그래서 이것은 여러 버전에 걸쳐 더 강력했습니다.아이디어 있어요?
추가 키워드: 플라스크 테스트 로그 제거 stdout 출력
덕분에:
- http://code.activestate.com/lists/python-list/621740/ 및
- 다양한 클래스와 가져오기를 사용하여 Python 로깅을 통해 파일 핸들을 즉시 변경하는 방법
여러가지 해결책으로 이 응답 로그들을 없애려고 노력했는데 알고 보니 플라스크 / Werkzeug가 아니라 Gunicorn 접속 로그가 stderr에 버려져 있었습니다.
솔루션은 Gunicorn 구성 파일에 다음 블록을 추가하여 기본 액세스 로그 처리기를 NullHandler로 교체했습니다.
logconfig_dict = {
"version": 1,
"disable_existing_loggers": False,
"handlers": {
"console": {"class": "logging.StreamHandler", "level": "INFO"},
"null": {"class": "logging.NullHandler"},
},
"loggers": {
"gunicorn.error": {"level": "INFO", "propagate": False, "handlers": ["console"]},
"gunicorn.access": {"level": "INFO", "propagate": False, "handlers": ["null"]},
},
}
어떻게든 위의 옵션 중 하나도 없습니다..disabled = True
저를 위해 일했습니다.
하지만 다음은 효과가 있었습니다.
logging.getLogger('werkzeug').setLevel(logging.CRITICAL)
파이썬 3.7.3에서 2021년 11월 현재 최신 버전 사용:
pip3 list | grep -E "(connexion|Flask|Werkzeug)"
connexion2 2.10.0
Flask 2.0.2
Werkzeug 2.0.2
다음은 werkzeug 버전 2.1.0 이상을 포함한 모든 로깅을 비활성화하는 방법입니다.
import flask.cli
flask.cli.show_server_banner = lambda *args: None
import logging
logging.getLogger("werkzeug").disabled = True
2022-10년 현재 플라스크를 침묵시키기 위한 나의 현재 해결책.
그러면 로깅 및 시작 배너가 비활성화됩니다.
class WSServer:
...
@staticmethod
def _disabled_server_banner(*args, **kwargs):
"""
Mock for the show_server_banner method to suppress spam to stdout
"""
pass
def _run_server(self):
"""
Winds-up the server.
"""
# disable general logging
log = logging.getLogger('werkzeug')
log.setLevel(logging.CRITICAL)
# disable start-up banner
from flask import cli
if hasattr(cli, "show_server_banner"):
cli.show_server_banner = self._disabled_server_banner
...
동일한 로그 형식을 제공하기 위해 사용자 정의 로그와 플라스크 로그를 병합했습니다.
자세한 내용은 https://github.com/senthilkumarimuth/logging_for_python .
print() 문 옆에 있는 콘솔에 로그인하는 것을 정말 원하지 않는 경우 이를 수행하는 강력한 방법은 다음과 같습니다.logging.basicConfig(level=logging.FATAL)
이렇게 하면 치명적인 상태의 로그가 모두 비활성화됩니다.인쇄를 비활성화하지는 않겠지만, 네, 그냥 생각해 보세요 :/
편집: 저는 제가 사용한 문서에 링크를 붙이지 않는 것이 이기적일 것이라는 것을 깨달았습니다: https://docs.python.org/3/howto/logging.html#logging-basic-tutorial
첫 번째 요점:플라스크 공식 문서에 따르면 app.run()을 사용하여 플라스크 애플리케이션을 실행하면 안 됩니다.가장 좋은 해결책은 uwsgi를 사용하는 것이므로 "--disable-logging" 명령을 사용하여 기본 플라스크 로그를 사용하지 않도록 설정할 수 있습니다.
예:
uwsgi --socket 0.0.0.0:8001 --disable-logging --protocol=http -w app:app
언급URL : https://stackoverflow.com/questions/14888799/disable-console-messages-in-flask-server
'programing' 카테고리의 다른 글
C에서 C++의 신규/삭제와 동등한 것은 무엇입니까? (0) | 2023.08.15 |
---|---|
플로팅 차일드 디브의 키를 부모 키로 확장하려면 어떻게 해야 합니까? (0) | 2023.08.10 |
좋아요와 좋아요가 반대 결과를 반환하지 않음 (0) | 2023.08.10 |
MS 액세스에서 반올림 (0) | 2023.08.10 |
Jquery에서 키와 값을 모두 배열로 밀어넣는 방법 (0) | 2023.08.10 |