Qt/PROGRAM: ako presmerovať výstup konzoly na syslog

0

Otázka

Mám QtQuick/PROGRAM aplikácia beží na vzdialenom vložené cieľového systému. Mám syslog nakonfigurovaný na cieľ na priame správy záznamu do denníka server.

Teraz, ja by som chcel mať štandardné von a err výstup konzoly aj presmerovaný na miestnej syslog, aby som si všetky moje aplikácie spätnú väzbu na jednom mieste.

Je tam "best practices" spôsob, ako to urobiť? Alebo budem chcieť/je potrebné získať všetky tento výstup do mojej žiadosti a prihlásiť sa cez "normálne kanály"?

Edit: viem to s bash presmerovanie na túto otázku/odpoveď, ale ja by som ešte radšej to urobiť priamo z aplikácie, ak je to možné.

Edit: myslím, že by som mala mať viac jasné, že nie som s otázkou o tom, ako získať správy, ktoré prechádzajú aplikácia na zapisovanie API ísť na syslog. Ak sa vyskytnú chyby v mojom QtQuick PROGRAM, Qt runtime generuje chyba a správy s upozornením, ktoré sa dostanú vytlačené na stderr. Je to tieto správy, že sa chcem dostať presmerovaný na systém zapisovania zariadenia.

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

Najlepšiu odpoveď

2

Pamäti, že všetky Qt a PROGRAM denník bude vysielané prostredníctvom tohto kanálu.

#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

Nechcel som vyskúšať, zostaviť, ale len pozostáva toto riešenie tým, že cituje z mojich projektov. Správne používanie je samozrejme závisí na aplikácii, ale pravdepodobné, že všetko sa dá urobiť v main.cpp pre ktoré Qt/PROGRAM objekt pred app.exec() hovor.
Alexander V

Myslím, že, mal by som mať viac jasné, že nie som s otázkou o tom, ako získať správy, ktoré prechádzajú aplikácia na zapisovanie API ísť na syslog. Ak sa vyskytnú chyby v mojom QtQuick PROGRAM, Qt runtime generuje chyba a správy s upozornením, ktoré sa dostanú vytlačené na stderr. Je to tieto správy, že sa chcem dostať presmerovaný na systém zapisovania zariadenia. Budem upraviť/vylepšiť môj pôvodný príspevok pre viac jasnosti.
alpartis

Od Qt dokumenty: Použitie konzoly.denník, konzoly.ladenie, console.info, konzoly.varovať, alebo konzolu.chyby tlače ladiace informácie do konzoly. Mali by sme očakávať, že CHYBA úrovni prihlásiť, aby ste mohli filter, ktorý sa v qtLogMessageHandler() funkcia, ako je uvedené vyššie ísť cez syslog. Zvážte Qt denník úroveň QtCriticalMsg, QtFatalMsg, QtSystemMsg a zistiť, ktorá z nich je zvýšený vzhľadom na prihlásenie budete snažiť presmerovať. To je predpoklad, ale vo všeobecnosti všetky Qt denník je ako, že.
Alexander V

V iných jazykoch

Táto stránka je v iných jazykoch

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