在编译或 运行 PyQT4 GUI 应用程序时排除(或禁用)log4cplus 警告?

Exclude (or disable) log4cplus warnings when compiling or running a PyQT4 GUI app?

我在 Python 中使用 QtDesigner 构建了一个小的 GUI 应用程序,并将该应用程序传递给了我团队中使用 Autodesk 360 + Autocad 的几个人。

我的应用程序使用 QFileDialog 命令获取文件名,已知在计算机上安装 Autodesk 360 时存在错误:link 1, link2 .

错误:调用文件对话框时,控制台总是returns以下错误:

log4cplus:ERROR No appenders could be found for logger (AdSyncNamespace).
log4cplus:ERROR Please initialize the log4cplus system properly.

这个错误并不严重,因为它不会改变处理过程,但我不希望任何错误消息像那样弹出。

考虑到我们经常将应用程序分发给每天使用 Autodesk 产品的人,并且该错误看起来不会很快得到纠正,是否可以忽略此错误,以便它不会在控制台中显示? 也许是在构建过程中使用 py2exe 忽略了某些内容...我不知道在哪里搜索。谢谢!

免责声明:不是完整的答案,而是对问题的扩展跟踪。

问题是 Autodesk 360 的至少一个组件(可能 AdSyncNamespace.dll)使用了 log4cplus 库,但没有为其提供正确的配置。

根据 log4cplus:ERROR in python when calling for tkinter file dialog 甚至@wilx 的说法,log4cplus 的作者早在 2013 年就不知道如何正确解决这个问题。

默认情况下,log4cplus需要一个java风格的属性文件来加载配置,所以我想,AdSyncNamespace.dll 可能有这样的配置,可以在文件中,也可以存储在 Windows 注册表项中。您可以在 Autodesk 安装文件夹中搜索包含 log4cplus. 字符串的文件,并跟踪使用 See what files/registry keys are being accessed by application in Windows

访问的注册表项

当然,这一切可能看起来很无聊,您可能更喜欢更简单的解决方案。一个更简单的解决方案是将您的应用 STDERR 重定向到任何地方,如 here 所述 或 here 但这可能不适合您的程序,因为它使用控制台进行输出。

更新:您可以尝试在您的应用程序中甚至全局设置环境变量LOG4CPLUS_LOGLOG_QUIETMODE=false,并检查它是否有帮助。此外,如果您不需要 STDERR 并通过 STDOUT 执行所有 "valid" 控制台输出,那么您可以尝试简单地关闭 STDERR 或将其重定向到 nul如上面提供的链接中所述。