我有一個在遠程嵌入式目標系統上運行的 QtQuick/QML 應用程式。我在目標上配置了 syslog 以將日志訊息定向到日志服務器。
現在,我希望將標準輸出和 err 控制臺輸出也重定向到本地系統日志,以便我可以在一個地方獲得所有應用程式反饋。
有沒有“最佳實踐”的方法來做到這一點?或者我是否想要/需要在我的應用程式中獲取所有這些輸出并通過“正常渠道”記錄它?
編輯:我可以根據這個問題/答案使用 bash 重定向來做到這一點,但如果可能的話,我仍然更愿意在應用程式中做到這一點。
編輯:我想我應該更清楚地說明我不是在問如何獲取通過應用程式的日志 API 進入系統日志的訊息。如果我的 QtQuick QML 中有錯誤,Qt 運行時會生成錯誤和警告訊息并列印到 stderr。我想將這些訊息重定向到系統日志記錄工具。
uj5u.com熱心網友回復:
請注意,所有 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();
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/362761.html