Qt/QML:如何将控制台输出重定向到syslog



我有一个QtQuick/QML应用程序在远程嵌入式目标系统上运行。我在目标上配置了syslog,以便将日志消息定向到日志服务器。

现在,我希望将标准的out和err控制台输出也重定向到本地syslog,这样我就可以在一个地方获得所有的应用程序反馈。

是否存在";最佳实践";怎么做?或者我想/需要在我的应用程序中获得所有这些输出并通过";正常通道";?

编辑:根据这个问题/答案,我可以使用bash重定向来实现这一点,但如果可能的话,我仍然更喜欢在应用程序中实现。

编辑:我想我应该更清楚地表明,我并不是在问如何让消息通过应用程序的日志API进入系统日志。如果我的QtQuick QML中有错误,Qt运行时会生成错误和警告消息,并将其打印到stderr。我想将这些消息重定向到系统日志记录功能。

请注意,所有Qt和QML日志都将通过该通道进行流式传输。

#include <syslog.h>
#include <QtGlobal>
/// Consider https://linux.die.net/man/3/openlog
/// Qt Log Message handler
static void qtLogMessageHandler(QtMsgType type, const QMessageLogContext &context, const QString &msg)
{
QByteArray loc = msg.toUtf8();
switch (type) {
case QtDebugMsg:
syslog (LOG_DEBUG, "%s", loc.constData());
break;
case QtInfoMsg:
syslog (LOG_INFO, "%s", loc.constData());
break;
case QtWarningMsg:
syslog (LOG_WARNING, "%s", loc.constData());
break;
case QtCriticalMsg:
syslog (LOG_CRIT, "%s", loc.constData());
break;
case QtFatalMsg:
syslog (LOG_ERR, "%s", loc.constData());
break;
}
}
int main(int argc, char* argv[])
{
/// When starting the process
openlog("MY_APP_LOG", LOG_CONS | LOG_PID | LOG_NDELAY, LOG_USER);
/// Install Qt Log Message Handler in main.cpp
qInstallMessageHandler(qtLogMessageHandler);
/// The Qt app GUI start can be
QApplication app(argc, argv);
app.exec();
/// When quitting the process
closelog();
}

最新更新