【问题标题】:Google App Engine/Python - Change logging formattingGoogle App Engine/Python - 更改日志格式
【发布时间】:2011-03-07 12:56:05
【问题描述】:

如何更改 Google App Engine 中 logging 模块的输出格式?

我试过了,例如:

  log_format = "* %(asctime)s %(levelname)-8s %(message)s"
  date_format = "%a, %d %b %Y %H:%M:%S"

  console = logging.StreamHandler()
  fr = logging.Formatter(log_format)
  console.setFormatter(fr)

  logger = logging.getLogger()
  logger.addFilter(SuperfluousFilter())
  logger.addHandler(console)

  logger.setLevel(logging.DEBUG)
  console.setLevel(logging.DEBUG)

  logging.error("Reconfiguring logging")

但是这会导致重复的日志输出:一个来自google/appengine/tools/dev_appserver.py(或谷歌代码中的某处)的日志处理程序,另一个来自我上面的新StreamHandler。以上代码输出:

错误 2010-06-23 20:46:18,871 initialize.py:38] 重新配置日志记录 2010-06-23 20:46:18,871 错误重新配置日志记录

最上面一行显然来自dev_appserver.py,最下面一行来自我的代码。

所以我猜推论的问题是:如何更改 Google App Engine 的格式,同时避免重复输出?

感谢您的阅读。

布赖恩

【问题讨论】:

    标签: python google-app-engine logging


    【解决方案1】:

    这是一种无需重复输出即可更改日志记录格式的方法:

    # directly access the default handler and set its format directly
    logging.getLogger().handlers[0].setFormatter(fr)
    

    这有点小技巧,因为您必须直接访问存储在根记录器中的handlers 列表。问题是 GAE 在您的代码运行之前自动使用 logging - 这会创建一个默认处理程序。不幸的是,如果不直接访问上面的handlers 列表,我看不出如何获得对这个处理程序的引用。

    【讨论】:

    • 这很有帮助。我考虑过在根记录器上运行setLevel(logging.CRITICAL) 的另一个选项,并为stderr 创建一个新记录器。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-30
    • 2018-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多