【问题标题】:Logger in Flask application has stopped logging to consoleFlask 应用程序中的记录器已停止记录到控制台
【发布时间】:2021-03-19 04:05:22
【问题描述】:

我最近在我的 Flask 应用程序中设置了日志记录,以便它可以记录到文件和标准输出。我正在插入像

这样的日志记录语句
current_app.logger.info('Logging message')

进入路由,以便我在路由上运行 pytest 测试时可以看到日志消息。这工作了一段时间(记录到文件和控制台),但在某些时候它停止记录到控制台,同时继续记录到日志文件。

我不确定是什么原因导致停止记录到标准输出。唯一想到的是,我曾尝试在某个时刻向测试模块添加一条日志记录语句。这导致了一个错误,这可能与我的应用程序工厂 pytest 夹具定义的应用程序中未配置记录器有关。但是,我已经从测试模块中删除了这个日志记录语句,我仍然没有得到我之前得到的控制台日志。

任何人都可以看到停止登录控制台的任何原因吗?

我的日志配置:

__init__.py:

def create_app(test_config=None):

    app = Flask('project_name', instance_relative_config=True)

    ...

    if not app.debug:
        if not os.path.exists('logs'):
            os.mkdir('logs')
        file_handler = RotatingFileHandler('logs/trivia.log', maxBytes=10240, backupCount=10)
        file_handler.setFormatter(logging.Formatter(
            '%(asctime)s %(levelname)s: %(message)s [in %(pathname)s:%(lineno)d]'))
        file_handler.setLevel(logging.INFO)
        app.logger.addHandler(file_handler)

        stream_handler = StreamHandler(sys.stdout)
        stream_handler.setFormatter(logging.Formatter(
            '%(asctime)s %(levelname)s: %(message)s [in %(pathname)s:%(lineno)d]'
        ))
        stream_handler.setLevel(logging.INFO)
        app.logger.addHandler(stream_handler)

        app.logger.setLevel(logging.INFO)
routes.py

@bp.route('/add', methods=['POST'])
def add_question():
    current_app.logger.info("Received request to /add")
    ...

【问题讨论】:

  • 您确定使用正确的级别进行日志记录吗?在您显示的代码中,您使用的是current_app.logger.debug,但级别设置为INFO。调试在信息下方,因此不会显示
  • 好地方。这是少数日志语句之一,其中一些是INFO。当我将其更改为 info 时,该声明尤其不起作用。编辑帖子以避免混淆;谢谢。

标签: python flask logging


【解决方案1】:

发生这种情况是因为日志消息仅在 pytest 测试失败时才会显示在控制台中。我的测试都通过了一段时间,所以我没有看到日志消息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-23
    • 2011-06-05
    • 1970-01-01
    • 1970-01-01
    • 2011-03-29
    • 2012-10-05
    • 2020-03-17
    • 1970-01-01
    相关资源
    最近更新 更多