pg2*_*455 5 python logging wsgi gevent flask
我正在使用 wsgi 服务器为我的 Web 应用程序生成服务器。我在记录信息时遇到问题。
这就是我运行应用程序的方式
from gevent import monkey; monkey.patch_all()
from logging.handlers import RotatingFileHandler
import logging
from app import app # this imports app
# create a file to store weblogs
log = open(ERROR_LOG_FILE, 'w'); log.seek(0); log.truncate();
log.write("Web Application Log\n"); log.close();
log_handler = RotatingFileHandler(ERROR_LOG_FILE, maxBytes =1000000, backupCount=1)
formatter = logging.Formatter(
"[%(asctime)s] {%(pathname)s:%(lineno)d} %(levelname)s - %(message)s"
)
log_handler.setFormatter(formatter)
app.logger.setLevel(logging.DEBUG)
app.logger.addHandler(log_handler)
# run the application
server= wsgi.WSGIServer(('0.0.0.0', 8080), app)
server.serve_forever()
Run Code Online (Sandbox Code Playgroud)
但是,在运行应用程序时,它不会记录任何内容。我想这一定是因为 WSGI 服务器,因为 app.logger 在没有 WSGI 的情况下工作。使用 WSGI 时如何记录信息?
根据gevent uwsgi 文档,您需要在创建时将日志处理程序对象传递给 WSGIServer 对象:
\n\n\nlog \xe2\x80\x93 如果给定,则具有写入方法的对象将写入请求(访问)日志。如果未给出,则默认为 sys.stderr。您可以传递 None 来禁用请求日志记录。您可以使用包装器(例如日志记录)来支持不实现写入方法的对象。(如果您传递 Logger 实例,或者通常提供 log 方法但不提供 write 方法的实例,则会自动创建这样的包装器,并将其记录到 INFO 级别。)
\nerror_log \xe2\x80\x93 如果给定,则为类似文件的对象,具有写入、写入行和刷新方法,错误日志将写入其中。如果未给出,则默认为 sys.stderr。您可以传递 None 来禁用错误日志记录(不推荐)。您可以使用包装器(例如日志记录)来支持未实现正确方法的对象。该参数将成为 WSGI 环境中 wsgi.errors 的值(如果尚未设置)。(与日志一样,Logger 实例等的包装器将自动创建并记录到 ERROR 级别。)
\n
所以你应该能够做到wsgi.WSGIServer((\'0.0.0.0\', 8080), app, log=app.logger)
| 归档时间: |
|
| 查看次数: |
9537 次 |
| 最近记录: |