Ich möchte nur eine System-Logger mit syslog.h
in meiner Anwendung erstellen. Ich weiß nicht, wie man beginnt, mit dieser Bibliothek zu erstellen, und ich habe das Syslog in diesem Link https://github.com/asankah/syslog-win32 heruntergeladen, aber ich weiß nicht, wie es funktioniert. Ich suchte verwandte Themen darüber, wie man Syslog verwendet, aber ich sah viele Themen auf Linux OS, ich versuche es, aber es funktioniert nicht. Ich zielte darauf ab, dieses Syslog in Windows OS zu erstellen und es in meiner Anwendung, die ich entwickelte, anzuwenden.Wie wird die Syslog-Win32-Bibliothek in qt verwendet?
Wenn ich diese Syntax verwendet:
#include "mainwindow.h"
#include <QApplication>
#include <syslog.h>
#include<stdio.h>
#include<stdlib.h>
#include<stdarg.h>
#include <QString>
#include <QByteArray>
#include<QtCore/QtGlobal>
#include <QFile>
#include <QTextStream>
#pragma comment(lib,"Ws2_32.lib")
void SyslogMessageHandler(QtMsgType type, const QMessageLogContext &context, const QString &msg)
{
QByteArray localMsg = msg.toLocal8Bit();
QString Stype;
char fmt[] = {"Debug: %s", "Info: %s", "Warning: %s", "Critical: %s", "Fatal %s"};
switch (type) {
case QtDebugMsg:
syslog(LOG_DEBUG, fmt[0], localMsg.constData());
break;
case QtInfoMsg:
syslog(LOG_INFO, fmt[1], localMsg.constData());
break;
case QtWarningMsg:
syslog(LOG_WARNING, fmt[2], localMsg.constData());
break;
case QtCriticalMsg:
syslog(LOG_CRIT, fmt[3], localMsg.constData());
break;
case QtFatalMsg:
syslog(LOG_ALERT, fmt[4], localMsg.constData());
abort();
break;
}
QFile outFile("Log.txt");
outFile.open(QIODevice::WriteOnly | QIODevice::Append /*|QIODevice::Truncate*/);
QTextStream ts(&outFile);
QString log = QString("%1: %2 \n").arg(Stype).arg(msg).arg(context.file).arg(context.line).arg(context.function);
QByteArray logMsg = log.toLocal8Bit();
ts << logMsg << endl;
outFile.close();
}
int main(int argc, char *argv[])
{
init_syslog("localhost");
qInstallMessageHandler(SyslogMessageHandler);
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
Der folgende Fehler tritt auf:
void syslog(int,char *,...)': cannot convert argument 2 from const char [7]' to 'char *
Fehler: LNK2019: nicht aufgelöstes externes Symbol in Funktion verweist init_syslog Haupt
Ich weiß nicht, Was das Problem ist.
Warum willst du es selbst? Qt verfügt bereits über Protokollierungsfunktionen, die Ihren Anforderungen entsprechend angepasst werden können. Dies könnte Ihnen helfen: https://stackoverflow.com/questions/4954140/how-to-redirect-qdebug-qwarning-qcritical-etc-output – Azeem
Ich habe meinen Beitrag aktualisiert. Ich muss wissen, wie man diese Bibliothek verwendet, um zu testen, ob es viel schneller ist als in anderen qt-Einrichtungen. weil in der Anwendung, die ich entwickelte, der Debugging-Prozess langsam ging, wenn ich die andere qt Protokollierungseinrichtung verwendete. –
Können Sie etwas genauer über die "Einrichtungen" sein, die Sie verwenden? Und welche Art von Langsamkeit hast du vor? Sende deinen Code auch. – Azeem