專案中log日誌檔案的生成和管理
每個應用程式一般都會生成自己的log日誌檔案,用來記錄使用過程中的一些關鍵操作和訊息記錄、響應等,同時方便問題的追蹤定位,下邊來介紹實戰專案中到底如何生成管理專案日誌:
首先註冊訊息
qInstallMessageHandler(QtMessageOutput);
static void QtMessageOutput(QtMsgType type, const QMessageLogContext &context, const QString &msg)
{
Q_UNUSED(context);
// filter some msg
// Warning: libpng warning: iCCP: known incorrect sRGB profile
if (msg.startsWith("libpng warning:")) {
return;
}
QByteArray localMsg = msg.toLocal8Bit();
static int size = 4096;
static char *buf = new char[size];
switch (type) {
case QtDebugMsg:
_snprintf(buf, size, "Debug: %s", localMsg.constData());
break;
case QtInfoMsg:
_snprintf(buf, size, "Info: %s", localMsg.constData());
break;
case QtWarningMsg:
_snprintf(buf, size, "Warning: %s", localMsg.constData());
break;
case QtCriticalMsg:
_snprintf(buf, size, "Critical: %s", localMsg.constData());
break;
case QtFatalMsg:
_snprintf(buf, size, "Fatal: %s", localMsg.constData());
abort();
}
Log_info("%s", buf);
}
extern XLog *g_logCtx;
整個工程中使用一下巨集定義直接生成日誌訊息:
#define Log_info(msg, ...) \
g_logCtx->info(__FILE__, __LINE__, __FUNCTION__, NULL, msg, ##__VA_ARGS__)
#define Log_warn(msg, ...) \
g_logCtx->warn(__FILE__, __LINE__, __FUNCTION__, NULL, msg, ##__VA_ARGS__)
#define Log_error(msg, ...) \
g_logCtx->error(__FILE__, __LINE__, __FUNCTION__, NULL, msg, ##__VA_ARGS__)
呼叫例項:
Log_info("action id=%lld, login request: username=%s******", r->actionId(), data.data());