在 Python 3 中,日志记录在 Flask 下不起作用
logging is not working under Flask in Python 3
我原以为控制台会像 "server starting on port..." 一样打印调试语句,但是当我 运行 python app.py
以下文件时,什么也没有打印出来。我已经将我的应用程序设置为调试模式。
import logging
from flask import Flask
from flask_env import MetaFlaskEnv
from flask_restful import Resource, Api
from flask_restful import reqparse
from tornado.httpserver import HTTPServer
from tornado.ioloop import IOLoop
from tornado.wsgi import WSGIContainer
class Configuration(metaclass=MetaFlaskEnv):
"""
export PORT=80
"""
DEBUG = True
PORT = 5000
LOGGER = logging.getLogger(__name__)
LOGGER.setLevel(logging.DEBUG)
app = Flask(__name__)
app.config.from_object(Configuration)
api = Api(app)
@app.route('/')
def hello_world():
return 'Hello, World!'
if __name__ == '__main__':
LOGGER.debug("server starting on port :" + str(app.config["PORT"]))
HTTP_SERVER = HTTPServer(WSGIContainer(app))
HTTP_SERVER.listen(port=app.config["PORT"])
IOLoop.instance().start()
也尝试在根记录器上设置日志级别:
logging.getLogger().setLevel(logging.DEBUG)
或使用处理程序将输出显式重定向到标准输出:
import sys
import logging
root = logging.getLogger()
handler = logging.StreamHandler(sys.stdout))
root.addHandler(handler)
您可以:
- 为
LOGGER
创建处理程序
- 调用
logging.basicConfig()
第一个选项很简单:
handler = logging.StreamHandler()
LOGGER.addHandler(handler)
第二个需要澄清一下:
logging.basicConfig()
LOGGER = logging.getLogger(__name__)
LOGGER.setLevel(logging.DEBUG)
由于您没有提供处理程序,您的记录器将在父记录器中寻找处理程序等等... ...情况是 - 没有现成的默认处理程序。您必须使用 basicConfig
调用提供一些或设置默认值。请注意,模块级便利函数(logging.info
、logging.debug
、logging.error
、...)已经进行了这样的初始化,如果没有处理程序,它们会在内部调用 basicConfig
。
我原以为控制台会像 "server starting on port..." 一样打印调试语句,但是当我 运行 python app.py
以下文件时,什么也没有打印出来。我已经将我的应用程序设置为调试模式。
import logging
from flask import Flask
from flask_env import MetaFlaskEnv
from flask_restful import Resource, Api
from flask_restful import reqparse
from tornado.httpserver import HTTPServer
from tornado.ioloop import IOLoop
from tornado.wsgi import WSGIContainer
class Configuration(metaclass=MetaFlaskEnv):
"""
export PORT=80
"""
DEBUG = True
PORT = 5000
LOGGER = logging.getLogger(__name__)
LOGGER.setLevel(logging.DEBUG)
app = Flask(__name__)
app.config.from_object(Configuration)
api = Api(app)
@app.route('/')
def hello_world():
return 'Hello, World!'
if __name__ == '__main__':
LOGGER.debug("server starting on port :" + str(app.config["PORT"]))
HTTP_SERVER = HTTPServer(WSGIContainer(app))
HTTP_SERVER.listen(port=app.config["PORT"])
IOLoop.instance().start()
也尝试在根记录器上设置日志级别:
logging.getLogger().setLevel(logging.DEBUG)
或使用处理程序将输出显式重定向到标准输出:
import sys
import logging
root = logging.getLogger()
handler = logging.StreamHandler(sys.stdout))
root.addHandler(handler)
您可以:
- 为
LOGGER
创建处理程序
- 调用
logging.basicConfig()
第一个选项很简单:
handler = logging.StreamHandler()
LOGGER.addHandler(handler)
第二个需要澄清一下:
logging.basicConfig()
LOGGER = logging.getLogger(__name__)
LOGGER.setLevel(logging.DEBUG)
由于您没有提供处理程序,您的记录器将在父记录器中寻找处理程序等等... ...情况是 - 没有现成的默认处理程序。您必须使用 basicConfig
调用提供一些或设置默认值。请注意,模块级便利函数(logging.info
、logging.debug
、logging.error
、...)已经进行了这样的初始化,如果没有处理程序,它们会在内部调用 basicConfig
。