脱/最大似然是:如何重新定向控制台输出到syslog

0

的问题

我有一个qtquick-借助/最大似然运行的应用程序在一个偏远的目标系统。 我syslog配置目标直接登录的信息登录服务器。

现在,我想要的标准和err控制台输出也重定向到当地的系统日志,这样我就可以得到我的所有应用程序的反馈在一个地方。

是否有一个"最佳做法"的方式做到这一点? 或者我想要的/需要获得所有这些产出在我日志应用程序和通过"正常渠道"?

编辑:我可以这样做砸向每个 这个问题的答案,但我仍然喜欢做到这一点从内部应用程序,如果可能的话。

编辑:我想我应该做出更清楚的是,我不要求有关如何获得的消息,通过应用程序的记录API去syslog。 如果有错误。在我qtquick-借助最大似然,脱运行时产生错误和警告信息,获得印刷stderr. 这些消息,我想重定向到的系统记录工具。

c++ qml qt stderr
2021-11-15 14:52:25
1

最好的答案

2

记住,所有建和最大似然日志将流通过这个渠道。

#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();
}
2021-11-15 17:58:04

我没有尝试汇编,但是只有组成这个解决方案通过引述我的项目。 适当的语义是当然取决于应用程序,但很可能所有可以做的main.cpp 为此夸脱/最大似然目前 app.exec() 呼叫。
Alexander V

我想我应该做出更清楚的是,我不要求有关如何获得的消息,通过应用程序的记录API去syslog。 如果有错误。在我qtquick-借助最大似然,脱运行时产生错误和警告信息,获得印刷stderr. 这些消息,我想重定向到的系统记录工具。 我的编辑/改进我原来的职位,用于更清晰度。
alpartis

从夸脱docs:使用控制台。日志,控制台。调试,console.info,控制台。发出警告,或是控制台。错误的印刷的调试信息的控制台。 我们应该期望的错误级别的日志你可以过滤器,在qtLogMessageHandler()function如上通过syslog。 考虑脱记录水平QtCriticalMsg,QtFatalMsg,QtSystemMsg,看看哪一个是提出了由于日志你试图重定向。 这是一个假设,但一般都脱记录就是这样。
Alexander V

其他语言

此页面有其他语言版本

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................