Qt/스:리디렉션하는 방법 콘솔 출력을 syslog

0

질문

나는 가만 작성되/스 응용 프로그램에서 실행되는 원격 포함된 대상 시스템입니다. 가 syslog 구성하는 대상에 직접 로그 메시지를 로그는 서버입니다.

지금,나는 같은 표준 및 err 콘솔 출력한 리디렉션된 지역 syslog 그래서 얻을 수 있는 모든 내 응용 프로그램의 피드백에서 하나의 장소입니다.

이 있는 최상의 방법""방식으로 하면 이렇게 할 수 있습니까? 거나고 싶/을 얻기 위해 필요한 모든 출력이 내 응용 프로그램과 그것은 로그를 통해"정상적인 채널"?

편집:내가 이것을 할 수 있는 강력한 리다이렉션당 이 질문/답변,하지만 난 아직도 그것을 할 것을 선호 응용 프로그램 내에서,가능한 경우.

편집:내가 만들어야 더는 난지 않는 방법에 대해 묻는 메시지를 표시하는 응용 프로그램을 통해 로그인 API 가 syslog. 오류가있는 경우에만 작성되스,Qt 런타임 오류가 생성 및 경고 메시지를 얻는 인쇄 stderr. 그것은 이러한 메시지를 얻고 싶은 것으로 리디렉션 시스템을 로깅 시설입니다.

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

최고의 응답

2

는 모든 Qt 및 기능은 아래와 같이 로그를 통해 스트리밍이 채널입니다.

#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 는 Qt/스 개체전 app.exec() 전화입니다.
Alexander V

내가 더해야한다는 내지 않는 방법에 대해 묻는 메시지를 표시하는 응용 프로그램을 통해 로그인 API 가 syslog. 오류가있는 경우에만 작성되스,Qt 런타임 오류가 생성 및 경고 메시지를 얻는 인쇄 stderr. 그것은 이러한 메시지를 얻고 싶은 것으로 리디렉션 시스템을 로깅 시설입니다. 나는 수정/수정 나의 원래의 게시물에 대한 더 많은입니다.
alpartis

컴퓨터에서 문서를 사용:니다.로그 console.디버깅 console.info console.경고하거나 console.오류를 인쇄하는 디버깅 정보가합니다. 우리는 오류를 기대 수준을 로그할 수 있도록 하는 필터에서 qtLogMessageHandler()함수로 위을 통 syslog. 고려 Qt 로그인 수준의 QtCriticalMsg,QtFatalMsg,QtSystemMsg 시는 하나 이로 인해 발생하는 로그인을 시도할 리디렉션할 수 있습니다. 이것은 가정하지만 일반적으로 모든 Qt 로그는 다음과 같다.
Alexander V

다른 언어로

이 페이지는 다른 언어로되어 있습니다

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