1. 程式人生 > >專案中log日誌檔案的生成和管理

專案中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());