क्यूटी/QML: कैसे करने के लिए रीडायरेक्ट कंसोल आउटपुट के लिए syslog

0

सवाल

मैं एक QtQuick/QML आवेदन पर चल रहा है एक दूरस्थ एम्बेडेड लक्ष्य प्रणाली है । मैं syslog कॉन्फ़िगर लक्ष्य पर निर्देशित करने के लिए लॉग संदेश लॉग करने के लिए सर्वर ।

अब, मैं करने के लिए मानक है और गलती कंसोल आउटपुट भी करने के लिए पुनः निर्देशित स्थानीय syslog तो मैं सभी प्राप्त कर सकते हैं अपने आवेदन के प्रतिक्रिया में एक जगह है.

वहाँ है एक "सर्वोत्तम प्रथाओं" जिस तरह से यह करने के लिए? या मैं की जरूरत है/चाहते प्राप्त करने के लिए यह सब उत्पादन के भीतर अपने आवेदन और प्रवेश के माध्यम से यह "सामान्य चैनल"?

संपादित करें: मैं यह कर सकते हैं के साथ पार्टी की योजना बनाई पुनर्निर्देशन प्रति इस सवाल/जवाबहै, लेकिन मैं अभी भी पसंद करते हैं यह करने के लिए आवेदन के भीतर से, यदि संभव हो तो.

संपादित करें: मुझे लगता है मैं अधिक करना चाहिए स्पष्ट है कि मैं नहीं पूछ रहा हूँ के बारे में कैसे प्राप्त करने के लिए संदेश के माध्यम से जाना कि आवेदन के प्रवेश एपीआई के लिए जाने के लिए syslog. अगर वहाँ त्रुटियाँ हैं में QtQuick QML, क्यूटी रनटाइम त्रुटि उत्पन्न करता है और चेतावनी संदेश मिलता है कि मुद्रित करने के लिए stderr. यह उन लोगों के लिए संदेश है कि मैं चाहता हूँ प्राप्त करने के लिए पुनः निर्देशित प्रणाली के लिए प्रवेश की सुविधा.

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

सबसे अच्छा जवाब

2

मन में है कि सभी 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();
}
2021-11-15 17:58:04

मैं कोशिश नहीं की संकलित करने के लिए, लेकिन सिर्फ इस रचना के द्वारा समाधान के हवाले से अपनी परियोजनाओं. उचित अर्थ विज्ञान के पाठ्यक्रम पर निर्भर एप्लिकेशन लेकिन संभावना है सभी में किया जा सकता है main.cpp के लिए है कि क्यूटी/QML वस्तु से पहले app.exec() कॉल ।
Alexander V

मुझे लगता है मैं अधिक करना चाहिए स्पष्ट है कि मैं नहीं पूछ रहा हूँ के बारे में कैसे प्राप्त करने के लिए संदेश के माध्यम से जाना कि आवेदन के प्रवेश एपीआई के लिए जाने के लिए syslog. अगर वहाँ त्रुटियाँ हैं में QtQuick QML, क्यूटी रनटाइम त्रुटि उत्पन्न करता है और चेतावनी संदेश मिलता है कि मुद्रित करने के लिए stderr. यह उन लोगों के लिए संदेश है कि मैं चाहता हूँ प्राप्त करने के लिए पुनः निर्देशित प्रणाली के लिए प्रवेश की सुविधा. मैं हूँ/संपादित को निखारने में मेरी मूल पोस्ट में और अधिक स्पष्टता के लिए.
alpartis

से क्यूटी डॉक्स का उपयोग करें: console.लॉग इन करें, कंसोल.डीबग, console.info, सांत्वना.चेतावनी दी है, या console.त्रुटि मुद्रित करने के लिए डीबगिंग जानकारी के लिए कंसोल । हम उम्मीद करनी चाहिए त्रुटि के स्तर लॉग इन करें, तो आप कर सकता है कि फिल्टर बाहर में qtLogMessageHandler() समारोह के रूप में ऊपर जाने के लिए के माध्यम से syslog. पर विचार क्यूटी प्रवेश स्तर के QtCriticalMsg, QtFatalMsg, QtSystemMsg और देखो, जो एक उठाया गया है की वजह से लॉग इन करने के लिए आप पुनर्निर्देशित करने का प्रयास है. यह एक धारणा है, लेकिन आम तौर पर सभी क्यूटी प्रवेश की तरह है.
Alexander V

अन्य भाषाओं में

यह पृष्ठ अन्य भाषाओं में है

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

इस श्रेणी में लोकप्रिय

लोकप्रिय सवाल इस श्रेणी में