【问题标题】:How do I change the default format of log messages in python app engine?如何更改 python 应用引擎中日志消息的默认格式?
【发布时间】:2011-02-03 04:06:05
【问题描述】:

我想在我的请求处理程序的日志消息中默认记录模块和类名。

执行此操作的常用方法似乎是通过调用logging.basicConfig 设置自定义格式字符串,但这只能调用一次,并且在我的代码运行时已经调用过。

另一种方法是创建一个新日志Handler,它可以传递一个新日志Formatter,但这似乎不正确,因为我想使用 App Engine 已安装的现有日志处理程序。

将额外信息添加到 python App Engine 中的所有日志消息的正确方法是什么,但要使用现有的日志格式和接收器?

【问题讨论】:

    标签: python google-app-engine logging


    【解决方案1】:

    我发现这适用于 Python 3.6,它将为所有后续日志记录调用设置日志记录级别/格式,即使之前的导入调用了 logging

    logging_level = logging.INFO
    logging_fmt = "%(levelname)s:%(name)s:%(message)s"   # the default
    try:
        root_logger = logging.getLogger()
        root_logger.setLevel(logging_level)
        root_handler = root_logger.handlers[0]
        root_handler.setFormatter(logging.Formatter(logging_fmt))
    except IndexError:
        logging.basicConfig(level=logging_level, format=logging_fmt)
    

    【讨论】:

    • 这是当前版本的 python 3 中最紧凑/最优雅的吗?
    • @matanster 不幸的是我不够专业,无法回答这个问题,也许其他人可以对此发表评论
    【解决方案2】:

    我通过阅读logging 模块的__init__.py 完成了这个。我不知道这是否正确,但它似乎有效:

    import logging
    
    logging.basicConfig(level=logging.DEBUG,
                        format='%(asctime)s %(name)-12s %(levelname)-8s %(message)s',
                        datefmt='%m-%d %H:%M',
                        )
    
    logging.info('Danger Will Robinson!')
    # 03-31 20:00 root         INFO     Danger Will Robinson!
    root = logging.getLogger()
    hdlr = root.handlers[0]
    fmt = logging.Formatter('%(name)-12s: %(levelname)-8s %(message)s')
    hdlr.setFormatter(fmt)
    logging.info('Danger Will Robinson!')
    # root        : INFO     Danger Will Robinson!
    

    【讨论】:

    • 我注意到,如果 basicConfig() 之前没有被调用,root.handlers[0] 不起作用。这是为什么呢?
    • logging.basicConfig 是一个设置根处理程序的便利函数。如果您没有定义处理程序,则 root.handlers 是一个空列表。所以试图访问一个空列表的第一个元素,例如root.handlers[0],引发IndexError。每当您使用logging 模块时,您必须调用logging.basicConfig 或从文件中读取配置(例如logging.config.fileConfig)或set up the handler(s) yourself
    猜你喜欢
    • 1970-01-01
    • 2011-03-17
    • 2015-08-30
    • 2011-06-27
    • 2020-11-12
    • 1970-01-01
    • 2022-11-23
    • 1970-01-01
    • 2017-08-28
    相关资源
    最近更新 更多