当前位置: 首页 > 知识库问答 >
问题:

烧瓶应用程序中的记录器已停止记录到控制台

巩选
2023-03-14

我最近在我的Flask应用程序中设置了日志记录,这样它就可以登录到文件和stdout。我插入了日志记录语句

current_app.logger.info('Logging message')

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

我不确定是什么原因导致停止对stdout的日志记录。我想到的唯一一件事是,我曾尝试在测试模块中添加一个日志记录语句。这导致了一个错误,这可能与我的应用程序工厂pytest fixture定义的应用程序中没有配置记录器有关。但是,我已经从测试模块中删除了这个日志记录语句,并且仍然没有获得之前获得的控制台日志。

有人能看到为什么登录控制台会停止的原因吗?

我的日志记录配置:

__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")
    ...

共有1个答案

闻人仲渊
2023-03-14

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

 类似资料:
  • 我试图将来自一个非常简单的flask应用程序的应用程序日志消息保存在日志文件中。当我使用嵌入式Flask服务器运行应用程序时,这项功能完美无瑕,但在gUnicorn中运行时,它根本不起作用,基本上,运行gUnicorn时,不会将任何应用程序输出重定向到日志文件(我的Flask应用程序中指定的日志文件)或标准输出。 也就是说,这是我的烧瓶应用程序: 现在,如果我以以下方式启动应用程序: 我得到预期的

  • 完成硬件搭建后,为了能让这些模块和板子运作起来,需要向主控板烧录程序。 注意:根据自己的环境信息修改样例代码中的wifi信息和测试IoT网站账号。 //meanings: wifi ssid(DFRobot-guest), wifi password(dfrobot@2017), iot_id(Skv3zKyNb), iot_password(r1lD3ztJ4b) Obloq olq(&soft

  • 好的,所以我试图使内存appender(简单的记录器,日志到ArrayList而不是控制台或文件),但现在我想禁用它从打印到控制台。 问题和网站,到目前为止我已经读过了(但我仍然不知道它是什么)。。 StackOverFlow问题log4j:将特定类的输出记录到特定附加器 它包含了我想要实现的所有部分,但我仍然有点困惑。 我也读了这段Logback或Log4j附加解释的状态... 但是,如果log

  • 我使用jmeter已经有一段时间了,所以我知道HTTP测试脚本记录器的设置是可以的。清除浏览器历史,运行在公共或私人模式没有帮助。重新发布jmeter代理证书也没有什么区别,删除proxyserver.jks也是一样,以前经历过这种情况,我知道几天后HTTP测试脚本记录器会再次开始工作。两个jmeter v4都发生

  • 我有一个标准的Spring Boot微服务,它使用Log4j2进行所有日志记录。 我想优雅地关闭spring boot应用程序,以防日志记录失败(例如磁盘已满)。有办法设置吗?

  • 我正在开发一个应用程序“Call Recorder”,我已经授予了所有权限,但它并没有记录来电者的声音。我正在使用MediaRecorder。