【问题标题】:Logging not captured on behave steps未在行为步骤中捕获日志记录
【发布时间】:2016-09-09 01:54:56
【问题描述】:

好的,所以在我的 environment.py 文件中,我可以通过以下方式记录内容:

logging.basicConfig(level=logging.DEBUG, filename="example.log")

def before_feature(context, feature):
    logging.info("test logging")

但是当我在步骤文件中时,我无法执行日志记录:

logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)

@given("we have a step")
def step_impl(context):
    logger.debug("Test logging 2")

步骤中的日志消息不显示。我正在使用 python 行为模块。有什么想法吗?

我尝试在运行行为时启用和禁用日志捕获,但没有任何区别。

【问题讨论】:

  • 您的意思是它没有出现在控制台输出或 example.log 文件中吗?
  • 通过*.py 进行全文搜索,以检查谁else 在您的项目中调用logging.basicConfig。我已经看到它在像 __init__.py 这样的地方被调用,默默地影响从存在此类文件的包中导入模块的任何人。

标签: python logging bdd python-behave


【解决方案1】:

默认情况下,behaviour 倾向于在功能执行期间捕获日志,并且仅在失败的情况下显示它们。

要禁用此功能,您可以设置 log_capture=false 在行为.ini中

或者,您可以使用--no-logcapture 命令行选项

延伸阅读:Behave API Reference, Behave LogCapture

【讨论】:

  • 谢谢;拯救了我的一天!也许只有我一个人,但我觉得官方文档没有多大帮助。
  • 当使用默认格式化程序时,即使使用 --no-logcapturebehave 仍会捕获日志记录。只有当我设置--format=plain --no-logcapture 时,我才能看到日志。这太烦人了。
【解决方案2】:

什么对我有用:

behave --no-capture --no-capture-stderr --no-logcapture

并在 environment.py 中添加以下截图:

    def after_step(context, step):
        print("")

为什么:我发现行为没有记录一个步骤的最后一个打印语句。所以我只是在每一步之后添加了一个空的打印与上一个截图。

希望对你有帮助

【讨论】:

    【解决方案3】:

    在 steps.py 中从 environment.py 导入日志为我解决了问题。

    from features.environment import logging

    我不确定,但我想问题是每次导入日志时它都会重写你以前的配置,因为disable_existing_loggers 默认为 True。 (Here 是解释这一点的文档段落)

    【讨论】:

      猜你喜欢
      • 2014-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-03
      相关资源
      最近更新 更多