如何配置Python 2.3日志信息格式?
在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:
。