Qt/QML ยังไงเพื่อเปลี่ยนปลายทางจดหมายของคอนโซลองการแสดงผลหน้าจอที่ให้ปูมบันทึกระบบ

0

คำถาม

ฉันมี QtQuick/QML องโปรแกรมวิ่งบนทางไกลที่ฝังแนบเป้าหมายของระบบ ฉันมีบันทึกระบบปรับแต่งเป้าหมายให้โดยตรงปูมบันทึกจดหมายที่จะเป็นปูมบันทึกเซิร์ฟเวอร์

ตอนนี้ฉันอยากจะมีมาตรฐานออกมาแล้ว err นคอนโซลส่งออกได้ยัง redirected กในท้องถิ่นปูมบันทึกระบบดังนั้นฉันสามารถได้ทั้งหมดของโปรแกรมการแจ้งเตือนการเริ่มทำงานอยู่ที่นึง

มันมี"ที่ดีที่สุดที่ฝึก"ทางทำอย่างนี้เหรอ? หรือฉันจะต้องการ/ต้องการที่จะเอาทั้งหมดนี้ผลส่งออกภายในของโปรแกรมและปูมบันทึกมันผ่าน"ปกติช่อง"?

แก้ไข:ฉันจะทำอย่างนี้กับตบเว็ต่อ นี่คำถาม/คำตอบ,แต่ฉันก็ยังชอบที่จะทำมันจากภายในโปรแกรม,ถ้าเป็นไปได้

แก้ไข:ฉันคิดว่าฉันควรจะทำมากกชัดเจนแล้วว่าฉันไม่ได้ขอร้องเกี่ยวกับวิธีการได้ข้อความของว่างไปผ่านทางโปรแกรมคือการทำปูมบันทึกรูปแบบ api ต้องไปบันทึกระบบ. ถ้ามันมีข้อผิดพลาดอยู่ภายในของฉัน QtQuick QML ง Qt runtime สร้าเกิดข้อผิดพลาดและคำเตือนจดหมายนั่นไปพิมพ์ต้องการแจ้งข้อความผิดพลาด. มันเป็นข้อความพวกนั้นที่ฉันอยากจะ redirected กับระบบการทำปูมบันทึกสถานที่.

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

คำตอบที่ดีที่สุด

2

คิดว่าทั้งหมด Qt และ QML ปูมบันทึกจะถูก streamed ผ่านช่องสื่อสารนี้ซะ

#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

ฉันไม่ได้พยายามที่จะ compile แต่แค่เขียนนี่แก้ปัญหาโดยใช้คำพูดของออกจากโครงการของ. คนที่เหมาะสม semantics คือแน่นอนขึ้นอยู่กับแอพฯแต่ว่าทั้งหมดแล้ว main.cpp สำหรับ Qt/QML วัตถุก่อน app.exec() โทรมา
Alexander V

ฉันคิดว่าฉันควรจะทำมากกชัดเจนแล้วว่าฉันไม่ได้ขอร้องเกี่ยวกับวิธีการได้ข้อความของว่างไปผ่านทางโปรแกรมคือการทำปูมบันทึกรูปแบบ api ต้องไปบันทึกระบบ. ถ้ามันมีข้อผิดพลาดอยู่ภายในของฉัน QtQuick QML ง Qt runtime สร้าเกิดข้อผิดพลาดและคำเตือนจดหมายนั่นไปพิมพ์ต้องการแจ้งข้อความผิดพลาด. มันเป็นข้อความพวกนั้นที่ฉันอยากจะ redirected กับระบบการทำปูมบันทึกสถานที่. ฉันจะแก้ไข/refine ของฉันดั้งเดิมสำหรับโพสมากกว่าความชัดเจน
alpartis

จาก Qt docs:ใช้คอนโซล.ปูมบันทึก,คอนโซล.การดีบั๊ก,console.info,คอนโซล.เตือนหรือคอนโซล.เกิดข้อผิดพลาดที่จะพิมพ์ข้อมูลดีบั๊กโปรแกรมต้องคอนโซล. เราควรจะคาดหวังให้เกิดข้อผิดพลาดระดับปูมบันทึกดังนั้นคุณอาจกรองที่อยู่ใน qtLogMessageHandler ฟังก์ชัน()ที่อยู่เหนือไปผ่านตรงบันทึกระบบ. พิจารณา Qt ระดับของปูมบันทึกของ QtCriticalMsg,QtFatalMsg,QtSystemMsg แล้วดูว่าอันไหนเป็นเลี้ยงเนื่องจากปูมบันทึกคุณพยายามจะเปลี่ยนปลายทางจดหมาย. นี่คือข้อสันนิษฐานได้แต่โดยทั่วไปแล้วทั้ง Qt ปูมบันทึกเป็นแบบนั้น
Alexander V

ในภาษาอื่นๆ

หน้านี้อยู่ในภาษาอื่นๆ

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

ดังอยู่ในนี้หมวดหมู่

ดังคำถามอยู่ในนี้หมวดหมู่