【问题标题】:Logger prints to console even though FileHandler is defined即使定义了 FileHandler,记录器也会打印到控制台
【发布时间】:2016-03-21 06:11:40
【问题描述】:

我在使用 python 日志记录模块时遇到了一些问题。在下文中,我创建了一个“记录器”,稍后将在我的代码中使用它。在这里,我只使用 FileHandler 但我看到当我将一些消息记录到这个记录器时,它们也会出现在控制台上。打印到控制台会使我的整个程序变慢。

以下是代码:

  logger = logging.getLogger("Design")
  logger.setLevel(logging.DEBUG)

  #create a file handler which logs all INFO, DEBUG, ERROR messages

  fh = logging.FileHandler('Design.log', mode='w')

  fmt = logging.Formatter('[%(levelname)s] %(message)s')       

  fh.setFormatter(fmt)

 #adding the handlers to logger
  logger.addHandler(fh)

【问题讨论】:

    标签: python


    【解决方案1】:

    你不见了logger.handlers = []

    logger = logging.getLogger("Design")
    logger.setLevel(logging.DEBUG)
    logger.handlers = []
    
    #create a file handler which logs all INFO, DEBUG, ERROR messages
    
    fh = logging.FileHandler('Design.log', mode='w')
    
    fmt = logging.Formatter('[%(levelname)s] %(message)s')       
    
    fh.setFormatter(fmt)
    
    #adding the handlers to logger
    logger.addHandler(fh)
    

    编辑

    如果您之前设置过basicConfig(),请添加此选项

    logger.propagate = False
    

    【讨论】:

    • 我尝试设置“logger.handlers= []”,但还是一样。
    • 我需要重置默认的basicConfig吗?
    • @boppu 在这种情况下看看这个答案stackoverflow.com/a/2267567/1517864。相应地编辑了我的答案
    • logger.propagate 有效。谢谢。我还有一个问题,有没有办法一次打印多行记录。我目前,打印到一个字符串,然后我一次将字符串记录到记录器。
    【解决方案2】:

    对我来说导致此错误的是导入语句。

    工作状态

    import logging
    fh = logging.FileHandler('error.log', mode='w')
    logger = getLogger(__name__)
    

    导入时出错 *

    from logging import *
    fh = logging.FileHandler('error.log', mode='w')
    logger = getLogger(__name__)
    

    并且没有更改我的代码,所以我需要这样做

    from logging import *
    fh = FileHandler('error.log', mode='w')
    logger = getLogger(__name__)
    

    【讨论】:

      猜你喜欢
      • 2013-08-19
      • 2020-03-17
      • 1970-01-01
      • 2012-08-17
      • 2019-07-08
      • 1970-01-01
      • 2019-08-27
      • 2011-08-21
      • 1970-01-01
      相关资源
      最近更新 更多