Flask打印机打印到文件

2024-04-23 15:56:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我希望我的PythonFlask项目将stderr打印为“stderr.txt”,并将stdout打印为“stoud.txt”

我已经看过了,但我不明白这意味着什么。我不希望stderr转到特定的命令,我希望所有flask打印到stderr.txtstoud.txt。例如,当我运行python app.py时,我希望能够执行cat stderr.txt并只看到错误,而当我运行cat stoud.txt时,我希望看到输出。没有标准

提前感谢:)


Tags: 项目py命令txtappflask标准错误
1条回答
网友
1楼 · 发布于 2024-04-23 15:56:52

据我所知(需要仔细检查)Werkzeug不使用命名记录器而使用根记录器,因此可以通过传递不同的处理程序来更改根记录器的行为:

from flask import Flask
import logging
from logging.handlers import RotatingFileHandler

app = Flask(__name__)

class LevelFilter(object):
    def __init__(self, level):
        self.level = level

    def filter(self, record):
        return record.levelno != self.level

# Redirect stdout and stderr to files
info_handler = RotatingFileHandler("info.log", backupCount=1)
info_handler.setLevel(logging.INFO)
# Don't print stack trace in info.log - optional
info_handler.addFilter(LevelFilter(logging.ERROR))

error_handler = RotatingFileHandler("err.log", backupCount=1)
error_handler.setLevel(logging.ERROR)

logging.root.handlers = [info_handler, error_handler]

@app.route("/")
def hello_world():
    return "Hello, world"


@app.route("/error")
def error():
    len(m)  # Some dumb error
    return "No wonder it crashed..."


if __name__ == "__main__":
    app.run(port=8080, debug=False)

运行此应用程序并访问/将在info.log中生成以下输出:

 * Running on http://127.0.0.1:8080/ (Press CTRL+C to quit)
127.0.0.1 - - [06/Oct/2020 15:57:11] "[37mGET / HTTP/1.1[0m" 200 -
127.0.0.1 - - [06/Oct/2020 15:57:21] "[35m[1mGET /error HTTP/1.1[0m" 500 -

访问/error将在err.log中打印错误的堆栈跟踪:

Exception on /error [GET]
Traceback (most recent call last):
  File "/home/anddt/.pyenv/versions/3.8.6/envs/flask-log/lib/python3.8/site-packages/flask/app.py", line 2447, in wsgi_app
    response = self.full_dispatch_request()
  File "/home/anddt/.pyenv/versions/3.8.6/envs/flask-log/lib/python3.8/site-packages/flask/app.py", line 1952, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/home/anddt/.pyenv/versions/3.8.6/envs/flask-log/lib/python3.8/site-packages/flask/app.py", line 1821, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/home/anddt/.pyenv/versions/3.8.6/envs/flask-log/lib/python3.8/site-packages/flask/_compat.py", line 39, in reraise
    raise value
  File "/home/anddt/.pyenv/versions/3.8.6/envs/flask-log/lib/python3.8/site-packages/flask/app.py", line 1950, in full_dispatch_request
    rv = self.dispatch_request()
  File "/home/anddt/.pyenv/versions/3.8.6/envs/flask-log/lib/python3.8/site-packages/flask/app.py", line 1936, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "app.py", line 16, in error
    len(m)  # Some dumb error
NameError: name 'm' is not defined

如果您不介意错误堆栈跟踪出现在两个日志中,那么您可以将过滤器添加到处理程序中

相关问题 更多 >