【问题标题】:import logging function from a module从模块导入日志功能
【发布时间】:2017-10-22 01:14:42
【问题描述】:

我正在尝试导入一个函数,该函数初始化两个具有不同级别的不同日志处理程序。问题是对于下面的选项 1,我正在获取根记录器,而对于选项 2,我无法将任何日志打印到屏幕上。

有没有人有任何想法或建议可能会有所帮助?

选项 1 测试模块:

def set_logger(
    app_name=argv[0][:-3]):
    logging.basicConfig(
    level=logging.DEBUG,
    format='[%(levelname)s][%(module)s][%(asctime)s] - %(message)s',
    filename="test.log"
    )
    console = logging.StreamHandler()
    console.setLevel(logging.INFO)
    formatter = logging.Formatter('[%(levelname)s][%(module)s][%(asctime)s] - %(message)s')
    console.setFormatter(formatter)
    logging.getLogger('').addHandler(console)

选项 2 测试模块:

def set_logger(
    app_name=argv[0][:-3]):

    formatter = logging.Formatter('[%(levelname)s][%(module)s][%(asctime)s] - %(message)s')
    logger = logging.getLogger(app_name)
    stream_log = logging.StreamHandler()
    stream_log.setLevel(logging.INFO)
    stream_log.setFormatter(formatter)
    file_log = logging.FileHandler("test.log")
    file_log.setLevel(logging.DEBUG)
    file_log.setFormatter(formatter)
    logger.addHandler(stream_log)
    logger.addHandler(file_log)

在脚本中:

from Module import set_logger
import logging

if __name__ == "__main__"
    set_logger()
    logging.info("start_app")

我在这里错过了什么?

【问题讨论】:

  • 你打电话给getLogger(''),所以你得到了root,对吧?
  • 那是正确的 - 但是当我通过 sys.argv[0] 时,它只是不打印任何东西。或者即使我要传递 name 它也会停止将日志生成到流媒体

标签: python python-3.x logging


【解决方案1】:

在选项 2 中,您正在通过 logging.getLogger() 初始化记录器 您需要在该函数中返回记录器并使用返回的记录器调用它,

if __name__ == "__main__"
    logger = set_logger()
    logger.info("start_app")

【讨论】:

  • 我很确定当我尝试这个时它并没有真正产生影响 - 让我在 @micebrain 上回复你。我可能错过了什么
  • 不记录到文件
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-28
  • 1970-01-01
  • 2015-02-25
  • 1970-01-01
  • 2018-02-03
相关资源
最近更新 更多