4

在 Python 2.4 及更高版本中,将日志记录模块配置为具有更基本的格式很容易:

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

但是对于需要支持 Python 2.3 的应用程序来说,这似乎更加困难,因为在 Py2.4 中对日志记录 API 进行了大修。特别是, basicConfig 不接受任何参数。尝试对 Py2.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)

但是在 Py2.3 中调用这个根记录器,例如

logging.info("Foo")

给出重复的输出:

Foo
INFO:root:Foo

我找不到修改 Py2.3 中根记录器上现有处理程序格式的方法(上面的“except”块),因此产生重复输出的“addHandler”调用。有没有办法在没有这种重复的情况下设置根记录器的格式?谢谢!

4

1 回答 1

4

except:无一例外,class[es] 是惹麻烦的好方法。我相信loggingPython 2.3 中的模块具有basicConfig()功能,但选项较少。由于它接受**kwargs它可能会在完成某些工作后随时失败。我认为它已经安装了一个默认格式的处理程序,然后无法配置某些东西。捕获异常后,您安装了另一个处理程序。拥有 2 个处理程序,您会为每个事件获得 2 条消息。在您的情况下最简单的方法:basicConfig()完全避免使用并logging手动配置。except:如果您不重新引发或记录捕获的异常,则永远不要使用。

于 2009-10-30T10:35:21.053 回答