⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fmtlog.cpp

📁 Software Testing Automation Framework (STAF)的开发代码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
    cout << "Usage: FmtLog FORMAT LOGFILE <Log File> NEWFILE <New File>" << endl         << "              [LEVELBITSTRING] [FIELDSEP <Field Separator>]"         << endl;}void writeLogRecordToString(STAFString &output, const LogRecord &logRecord,                            const STAFString &sep, const STAFString &endOfLine,                            bool levelAsBits){    unsigned int year = logRecord.date / 10000;    unsigned int month = (logRecord.date % 10000) / 100;    unsigned int day = logRecord.date % 100;    unsigned int hour = logRecord.secondsPastMidnight / 3600;    unsigned int minute = (logRecord.secondsPastMidnight % 3600) / 60;    unsigned int second = logRecord.secondsPastMidnight % 60;    STAFTimestamp theTimestamp(year, month, day, hour, minute, second);    output += theTimestamp.asString();    output += sep;    output += logRecord.machine;    output += sep;    output += STAFString(logRecord.handle);    output += sep;    output += logRecord.handleName;    output += sep;    output += logRecord.user;    output += sep;    output += logRecord.endpoint;    output += sep;    output += convertLogLevelToString(logRecord.logLevel, levelAsBits);    output += sep;    output += logRecord.message;    output += endOfLine;}unsigned int readLogRecordFromFile(istream &logfile, LogRecord &logRecord){    unsigned int totalLength = 0;    readUIntFromFile(logfile, logRecord.recordFormatID, 1);    if (logfile.eof()) return kReadLogEndOfFile;    if (logRecord.recordFormatID == sCurrRecordFormatID)    {        // This format added endpoint to the log record        readUIntFromFile(logfile, logRecord.date);        readUIntFromFile(logfile, logRecord.secondsPastMidnight, 3);        readUIntFromFile(logfile, logRecord.logLevel);        readUIntFromFile(logfile, logRecord.handle);        readStringFromFile(logfile, logRecord.machine);        readStringFromFile(logfile, logRecord.handleName);        readStringFromFile(logfile, logRecord.user);        readStringFromFile(logfile, logRecord.endpoint);        readStringFromFile(logfile, logRecord.message);    }    else if (logRecord.recordFormatID == 3)    {        // This format added user to the log record for Feature #627135        readUIntFromFile(logfile, logRecord.date);        readUIntFromFile(logfile, logRecord.secondsPastMidnight, 3);        readUIntFromFile(logfile, logRecord.logLevel);        readUIntFromFile(logfile, logRecord.handle);        readStringFromFile(logfile, logRecord.machine);        readStringFromFile(logfile, logRecord.handleName);        readStringFromFile(logfile, logRecord.user);        readStringFromFile(logfile, logRecord.message);        logRecord.endpoint = "tcp://" + logRecord.machine;   }    else if (logRecord.recordFormatID == 2)    {        readUIntFromFile(logfile, logRecord.date);        readUIntFromFile(logfile, logRecord.secondsPastMidnight, 3);        readUIntFromFile(logfile, logRecord.logLevel);        readUIntFromFile(logfile, logRecord.handle);        readStringFromFile(logfile, logRecord.machine);        readStringFromFile(logfile, logRecord.handleName);        readStringFromFile(logfile, logRecord.message);        logRecord.user = sUnauthenticatedUser;        logRecord.endpoint = "tcp" + sSpecSeparator + logRecord.machine;    }    else if (logRecord.recordFormatID == 1)    {        // This is the format used by the last couple of implementations        // of the Log service written in Rexx        readUIntFromFile(logfile, logRecord.date);        readUIntFromFile(logfile, logRecord.secondsPastMidnight, 3);        readUIntFromFile(logfile, logRecord.logLevel);        readUIntFromFile(logfile, totalLength);        // Get a buffer and read the rest of the data        STAFRefPtr<char> data = STAFRefPtr<char>(new char[totalLength],                                                 STAFRefPtr<char>::INIT);        logfile.read(data, totalLength);        STAFString dataString(data, totalLength, STAFString::kCurrent);        // Find the separation points for the other fields        unsigned int sepLoc1 = dataString.find(sOldSep);        unsigned int sepLoc2 = dataString.find(sOldSep, sepLoc1 + 1);        unsigned int sepLoc3 = dataString.find(sOldSep, sepLoc2 + 1);        logRecord.machine = dataString.subString(0, sepLoc1);        logRecord.handle =            dataString.subString(sepLoc1 + 1, sepLoc2 - sepLoc1 - 1).asUInt();        logRecord.handleName =            dataString.subString(sepLoc2 + 1, sepLoc3 - sepLoc2 - 1);        logRecord.message = dataString.subString(sepLoc3 + 1);        logRecord.user = sUnauthenticatedUser;        logRecord.endpoint = "tcp" + sSpecSeparator + logRecord.machine;    }    else if (logRecord.recordFormatID == 0)    {        // This is the format used by the first few implementations of the        // log service written in Rexx        readUIntFromFile(logfile, totalLength);        readUIntFromFile(logfile, logRecord.date);        readUIntFromFile(logfile, logRecord.secondsPastMidnight, 3);        // Remove date and time length from totalLength        totalLength -= 7;        // Get a buffer and read the rest of the data        STAFRefPtr<char> data = STAFRefPtr<char>(new char[totalLength],                                                 STAFRefPtr<char>::INIT);        logfile.read(data, totalLength);        STAFString dataString(data, totalLength, STAFString::kCurrent);        // Find the separation points for the other fields        unsigned int sepLoc1 = dataString.find(sOldSep);        unsigned int sepLoc2 = dataString.find(sOldSep, sepLoc1 + 1);        unsigned int sepLoc3 = dataString.find(sOldSep, sepLoc2 + 1);        logRecord.machine = dataString.subString(0, sepLoc1);        logRecord.handle =            dataString.subString(sepLoc1 + 1, sepLoc2 - sepLoc1 - 1).asUInt();        logRecord.handleName =            dataString.subString(sepLoc2 + 1, sepLoc3 - sepLoc2 - 1);        logRecord.message = dataString.subString(sepLoc3 + 5);        logRecord.logLevel = *(reinterpret_cast<unsigned int *>(                               const_cast<char *>(dataString.buffer()                                                  + sepLoc3 + 1)));        // Fixup log level from Rexx's big-endian to native format        logRecord.logLevel =            STAFUtilConvertLEUIntToNative(STAFUtilSwapUInt(logRecord.logLevel));        logRecord.user = sUnauthenticatedUser;        logRecord.endpoint = "tcp" + sSpecSeparator + logRecord.machine;    }    else    {        return kReadLogInvalidFormat;    }    return kReadLogOk;}void readUIntFromFile(istream &input, unsigned int &data, unsigned int length){    union    {        char bytes[4];        unsigned int uint;    };    uint = 0;    input.read(&bytes[4 - length], length);    data = STAFUtilConvertLEUIntToNative(STAFUtilSwapUInt(uint));}void readStringFromFile(istream &input, STAFString &inString){    // First read in the UTF-8 data    unsigned int stringLength = 0;    readUIntFromFile(input, stringLength);    char *inputData = new char[stringLength];    input.read(inputData, stringLength);    try    {        inString = STAFString(inputData, stringLength, STAFString::kUTF8);    }    catch(...)    {        delete [] inputData;        throw;    }    delete [] inputData;}STAFString &convertLogLevelToString(unsigned int logLevel, bool levelAsBits){    if (logLevel == 0x00000001)        return levelAsBits ? sFATALBits : sFATALPretty;    else if (logLevel == 0x00000002)        return levelAsBits ? sERRORBits : sERRORPretty;    else if (logLevel == 0x00000004)        return levelAsBits ? sWARNINGBits :  sWARNINGPretty;    else if (logLevel == 0x00000008)        return levelAsBits ? sINFOBits : sINFOPretty;    else if (logLevel == 0x00000010)        return levelAsBits ? sTRACEBits : sTRACEPretty;    else if (logLevel == 0x00000020)        return levelAsBits ? sTRACE2Bits : sTRACE2Pretty;    else if (logLevel == 0x00000040)        return levelAsBits ? sTRACE3Bits : sTRACE3Pretty;    else if (logLevel == 0x00000080)        return levelAsBits ? sDEBUGBits : sDEBUGPretty;    else if (logLevel == 0x00000100)        return levelAsBits ? sDEBUG2Bits : sDEBUG2Pretty;    else if (logLevel == 0x00000200)        return levelAsBits ? sDEBUG3Bits : sDEBUG3Pretty;    else if (logLevel == 0x00000400)        return levelAsBits ? sSTARTBits : sSTARTPretty;    else if (logLevel == 0x00000800)        return levelAsBits ? sSTOPBits : sSTOPPretty;    else if (logLevel == 0x00001000)        return levelAsBits ? sPASSBits : sPASSPretty;    else if (logLevel == 0x00002000)        return levelAsBits ? sFAILBits : sFAILPretty;    else if (logLevel == 0x00004000)        return levelAsBits ? sSTATUSBits : sSTATUSPretty;    else if (logLevel == 0x01000000)        return levelAsBits ? sUSER1Bits : sUSER1Pretty;    else if (logLevel == 0x02000000)        return levelAsBits ? sUSER2Bits : sUSER2Pretty;    else if (logLevel == 0x04000000)        return levelAsBits ? sUSER3Bits : sUSER3Pretty;    else if (logLevel == 0x08000000)        return levelAsBits ? sUSER4Bits : sUSER4Pretty;    else if (logLevel == 0x10000000)        return levelAsBits ? sUSER5Bits : sUSER5Pretty;    else if (logLevel == 0x20000000)        return levelAsBits ? sUSER6Bits : sUSER6Pretty;    else if (logLevel == 0x40000000)        return levelAsBits ? sUSER7Bits : sUSER7Pretty;    else if (logLevel == 0x80000000)        return levelAsBits ? sUSER8Bits : sUSER8Pretty;    else        return levelAsBits ? sUNKNOWNBits : sUNKNOWNPretty;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -