如何配置Python 2.3日志信息格式?

4 投票
1 回答
1076 浏览
提问于 2025-04-15 15:30

在Python 2.4及以后的版本中,设置日志模块的基本格式非常简单:

logging.basicConfig(level=opts.LOGLEVEL, format="%(message)s")

但是对于需要支持Python 2.3的应用来说,这就比较麻烦,因为在Python 2.4中,日志的API进行了大改动。特别是,basicConfig这个方法在2.3中并不接受任何参数。我尝试了2.3文档中唯一的示例变体,结果是:

try:
    logging.basicConfig(level=opts.LOGLEVEL, format="%(message)s")
except:
    logging.getLogger().setLevel(opts.LOGLEVEL)
    h = logging.StreamHandler()
    h.setFormatter(logging.Formatter("%(message)s"))
    logging.getLogger().addHandler(h)

但是在Python 2.3中调用这个根日志记录器,比如:

logging.info("Foo")

会出现重复的输出:

Foo
INFO:root:Foo

我找不到方法来修改Python 2.3中根日志记录器现有处理器的格式(上面的“except”块),因此才会出现“addHandler”调用导致的重复输出。有没有办法在不出现重复的情况下设置根日志记录器的格式呢?谢谢!

1 个回答

4

使用except:而不指定异常类型是个很容易出问题的做法。我记得在Python 2.3中,logging模块有一个basicConfig()函数,不过选项比较少。因为它接受**kwargs,所以在执行某些操作后可能会随时出错。我觉得它可能已经安装了一个默认格式的处理器,然后在配置其他东西时出错了。在捕获异常后,你又安装了另一个处理器。这样一来,你就会为每个事件收到两条消息。对于你的情况,最简单的办法是:完全避免使用basicConfig(),而是手动配置logging。而且,如果你不重新抛出或记录捕获的异常,就绝不要使用except:

撰写回答