【发布时间】:2017-09-20 02:57:49
【问题描述】:
我只想在我的应用程序中使用syslog.h 创建一个系统记录器。我不知道如何开始使用该库进行创建,我在此链接https://github.com/asankah/syslog-win32 中下载了系统日志,但我不知道它是如何工作的。我搜索了有关如何使用 syslog 的相关主题,但我看到了很多关于 linux OS 的主题,我尝试过,但它不起作用。我的目标是在 Windows 操作系统中创建此系统日志并将其应用到我开发的应用程序中。
当我使用这种语法时:
#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();
}
出现以下错误:
void syslog(int,char *,...)': cannot convert argument 2 from const char [7]' to 'char *
错误:LNK2019:函数 main 中引用的未解析的外部符号 init_syslog
我不知道是什么问题。
【问题讨论】:
-
为什么你自己想要它? Qt 已经拥有可以根据您的需要定制的日志记录工具。这可能会对您有所帮助:stackoverflow.com/questions/4954140/…
-
我更新了我的帖子。我需要知道如何使用该库来测试它是否比其他 qt 工具快得多。因为在我开发的应用程序中,当我使用其他 qt 日志工具时,调试过程会变慢。
-
您能更具体地了解您使用的“设施”吗?而且,你正面临什么样的缓慢?也发布您的代码。
-
void syslog( int pri, char* fmt, ... )' isfmt` 的第二个参数需要像printf函数一样的格式。您需要在此处提供%s,即syslog(LOG_DEBUG, "Debug: %s", localMsg.constData());。