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

Posted

技术标签:

【中文标题】在编译或运行 PyQT4 GUI 应用程序时排除(或禁用)log4cplus 警告?【英文标题】:Exclude (or disable) log4cplus warnings when compiling or running a PyQT4 GUI app? 【发布时间】:2016-09-10 02:19:03 【问题描述】:

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

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

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

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

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

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

【问题讨论】:

您是否使用控制台进行任何其他输入或输出? 是的,控制台用于在此过程中从用户那里获取一些 QA 并显示一些信息日志 您可以在应用程序的 stdout/stderr 上放置一个处理程序,让除某些消息之外的所有内容都通过。我不知道您的应用程序的其余部分是如何设置的。 我应该把这个处理程序放在应用程序的主入口点(即由py2exe编译的main.py脚本)吗?你有我如何过滤这个错误的代码示例吗? forums.autodesk.com/t5/installation-hardware-os/log4cplus-error/… 【参考方案1】:

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

问题在于,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 执行所有“有效”控制台输出,那么您可以尝试简单地关闭STDERR 或将其重定向到nul,如上面提供的链接中所述。

【讨论】:

以上是关于在编译或运行 PyQT4 GUI 应用程序时排除(或禁用)log4cplus 警告?的主要内容,如果未能解决你的问题,请参考以下文章

Matplotlib在PyQt4的应用

使用 PyQt4 或 PySide 捕获屏幕,除了特定的小部件?

使用 pyqt4 创建运行 python 脚本的 GUI

使用 Anaconda Python 的 PyQt Windows 安装程序 - 未找到 PyQt4;如何进行故障排除?

使用pyqt4写GUI小程序时一个clicked信号调用三次槽函数

PyQt4信号与槽