【问题标题】:How i can disable alembic logging at runtime?我如何在运行时禁用 Alembic 日志记录?
【发布时间】:2016-05-18 22:39:24
【问题描述】:

在单元测试中执行迁移时,我需要禁用 alembic 迁移日志记录。

我不能只从alembic.ini 中删除alembic 记录它:我自己执行迁移时需要此输出。

以下对我不起作用: logging.getLogger('alembic').setLevel(logging.CRITICAL)

如何在运行时禁用它?

【问题讨论】:

  • 通过打印检查您是否拥有正确的记录器名称:logging.Logger.manager.loggerDict
  • 如果你能够使用它(我强烈推荐 py.test),pypi.python.org/pypi/pytest-capturelog 可能会对你有所帮助。
  • 这些真的/只有alembic日志记录信息或SAWarnings或来自sqlalchemy的类似吗?

标签: python logging alembic


【解决方案1】:

您需要编辑 alembic.ini 文件并更改此特定日志的日志记录设置。您可以在relevant section of the Alembic tutorial 中了解它。默认情况下,此部分应在您的配置文件中:

[logger_alembic]
level = INFO
handlers =
qualname = alembic

我将我的设置为 WARN,然后这些日志消失了。

【讨论】:

    【解决方案2】:

    听起来您是通过调用 alembic 命令从单元测试中调用 Alembic,这是一个单独的进程,不会继承您的日志记录配置。

    相反,您应该以编程方式调用 Alembic:

    import logging
    import alembic.config
    import alembic.command
    
    logging.getLogger('alembic').setLevel(logging.CRITICAL)
    
    alembic_cfg = alembic.config.Config('alembic.ini')
    alembic.command.upgrade(alembic_cfg, 'head')
    

    有关Alembic API 的更多信息,请参阅文档。

    【讨论】:

      【解决方案3】:

      您不想在alembic.ini 文件中更改它,而是在env.py 文件中进行更改。那里会有一条线,看起来像

      fileConfig(config.config_file_name)
      

      这将使用 alembic.ini 配置文件设置日志记录。在此行之后,您可以对 alembic 记录器执行任何操作

      logging.getLogger('alembic')
      

      【讨论】:

        【解决方案4】:

        根据其他答案,这对我有用:

        import alembic.config
        import alembic.command
        
        alembic_cfg = alembic.config.Config('alembic.ini')
        alembic_cfg.set_section_option("logger_alembic", "level", "ERROR")
        alembic.command.upgrade(alembic_cfg, 'head')
        

        我们可以替换包含日志级别信息的配置部分值,而不是导入日志记录。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-11-16
          • 2011-07-12
          • 1970-01-01
          • 2011-05-21
          • 2018-12-24
          • 2020-01-17
          相关资源
          最近更新 更多