diff --git a/frameworks/native/format.cpp b/frameworks/native/format.cpp index b814ed70686f2fdcdbd05dd7383a609c448ae8e8..d4ad608e3c410fe279f38ca1b95b90c8c0d86d53 100644 --- a/frameworks/native/format.cpp +++ b/frameworks/native/format.cpp @@ -22,6 +22,7 @@ #include #include #include + namespace OHOS { namespace HiviewDFX { static const int HILOG_COLOR_BLUE = 75; @@ -58,7 +59,7 @@ int ColorFromLevel(uint16_t level) } } -int HilogShowTimeBuffer(char* buffer, int bufLen, HilogShowFormat showFormat, +int HilogShowTimeBuffer(char* buffer, int bufLen, int32_t showFormat, const HilogShowFormatBuffer& contentOut) { time_t now = contentOut.tv_sec; @@ -68,100 +69,77 @@ int HilogShowTimeBuffer(char* buffer, int bufLen, HilogShowFormat showFormat, int ret = 0; nsecTime = (now < 0) ? (NS - nsecTime) : nsecTime; - if ((showFormat == EPOCH_SHOWFORMAT) || (showFormat == MONOTONIC_SHOWFORMAT)) { + if ((showFormat & (1 << EPOCH_SHOWFORMAT)) || (showFormat & (1 << MONOTONIC_SHOWFORMAT))) { ret = snprintf_s(buffer, bufLen, bufLen - 1, - (showFormat == MONOTONIC_SHOWFORMAT) ? "%6lld" : "%19lld", (long long)now); - timeLen += ((ret > 0) ? ret : 0); + (showFormat & (1 << MONOTONIC_SHOWFORMAT)) ? "%6lld" : "%19lld", (long long)now); + timeLen += ((ret > 0) ? ret : 0); } else { ptm = localtime(&now); if (ptm == nullptr) { return 0; } - switch (showFormat) { - case YEAR_SHOWFORMAT: - timeLen = strftime(buffer, bufLen, "%Y-%m-%d %H:%M:%S", ptm); - ret = snprintf_s(buffer + timeLen, bufLen - timeLen, bufLen - timeLen - 1, - ".%03llu", nsecTime / NS2MS); - timeLen += ((ret > 0) ? ret : 0); - break; - case ZONE_SHOWFORMAT: - timeLen = strftime(buffer, bufLen, "%z %m-%d %H:%M:%S", ptm); - ret = snprintf_s(buffer + timeLen, bufLen - timeLen, bufLen - timeLen - 1, - ".%03llu", nsecTime / NS2MS); - timeLen += ((ret > 0) ? ret : 0); - break; - case TIME_NSEC_SHOWFORMAT: - timeLen = strftime(buffer, bufLen, "%m-%d %H:%M:%S", ptm); - ret = snprintf_s(buffer + timeLen, bufLen - timeLen, bufLen - timeLen - 1, - ".%09ld", nsecTime); - timeLen += ((ret > 0) ? ret : 0); - break; - case TIME_USEC_SHOWFORMAT: - timeLen = strftime(buffer, bufLen, "%m-%d %H:%M:%S", ptm); - ret = snprintf_s(buffer + timeLen, bufLen - timeLen, bufLen - timeLen - 1, - ".%06llu", nsecTime / NS2US); - timeLen += ((ret > 0) ? ret : 0); - break; - case COLOR_SHOWFORMAT: - ret = snprintf_s(buffer, bufLen, bufLen - 1, - "\x1B[38;5;%dm%02d-%02d %02d:%02d:%02d.%03llu\x1b[0m", ColorFromLevel(contentOut.level), - ptm->tm_mon + 1, ptm->tm_mday, ptm->tm_hour, ptm->tm_min, ptm->tm_sec, nsecTime / NS2MS); - timeLen += ((ret > 0) ? ret : 0); - break; - default: - timeLen = strftime(buffer, bufLen, "%m-%d %H:%M:%S", ptm); - ret = snprintf_s(buffer + timeLen, bufLen - timeLen, bufLen - timeLen - 1, - ".%03llu", nsecTime / NS2MS); - timeLen += ((ret > 0) ? ret : 0); - break; + timeLen = strftime(buffer, bufLen, "%m-%d %H:%M:%S", ptm); + timeLen = strlen(buffer); + if (showFormat & (1 << YEAR_SHOWFORMAT)) { + timeLen = strftime(buffer, bufLen, "%Y-%m-%d %H:%M:%S", ptm); + timeLen = strlen(buffer); + } + if (showFormat & (1 << ZONE_SHOWFORMAT)) { + timeLen = strftime(buffer, bufLen, "%z %m-%d %H:%M:%S", ptm); + timeLen = strlen(buffer); + } + if (showFormat & (1 << TIME_NSEC_SHOWFORMAT)) { + ret = snprintf_s(buffer + timeLen, bufLen - timeLen, bufLen - timeLen - 1, + ".%09ld", nsecTime); + timeLen += ((ret > 0) ? ret : 0); + } else if (showFormat & (1 << TIME_USEC_SHOWFORMAT)) { + ret = snprintf_s(buffer + timeLen, bufLen - timeLen, bufLen - timeLen - 1, + ".%06llu", nsecTime / NS2US); + timeLen += ((ret > 0) ? ret : 0); + } else { + ret = snprintf_s(buffer + timeLen, bufLen - timeLen, bufLen - timeLen - 1, + ".%03llu", nsecTime / NS2MS); + timeLen += ((ret > 0) ? ret : 0); } } return timeLen; } -void HilogShowBuffer(char* buffer, int bufLen, const HilogShowFormatBuffer& contentOut, HilogShowFormat showFormat) +void HilogShowBuffer(char* buffer, int bufLen, const HilogShowFormatBuffer& contentOut, int32_t showFormat) { int logLen = 0; int ret = 0; if (buffer == nullptr) { return; } - logLen += HilogShowTimeBuffer(buffer, bufLen, showFormat, contentOut); - - if (showFormat == COLOR_SHOWFORMAT) { - ret = snprintf_s(buffer + logLen, bufLen - logLen, bufLen - logLen - 1, - " \x1B[38;5;%dm%5d\x1b[0m", ColorFromLevel(contentOut.level), contentOut.pid); - logLen += ((ret > 0) ? ret : 0); - ret = snprintf_s(buffer + logLen, bufLen - logLen, bufLen - logLen - 1, - " \x1B[38;5;%dm%5d\x1b[0m", ColorFromLevel(contentOut.level), contentOut.tid); - logLen += ((ret > 0) ? ret : 0); - ret = snprintf_s(buffer + logLen, bufLen - logLen, bufLen - logLen - 1, - " \x1B[38;5;%dm%s \x1b[0m", ColorFromLevel(contentOut.level), ParsedFromLevel(contentOut.level)); - logLen += ((ret > 0) ? ret : 0); - ret = snprintf_s(buffer + logLen, bufLen - logLen, bufLen - logLen - 1, - "\x1B[38;5;%dm%05x/%s:\x1b[0m", ColorFromLevel(contentOut.level), - contentOut.domain & 0xFFFFF, contentOut.data); - logLen += ((ret > 0) ? ret : 0); - ret = snprintf_s(buffer + logLen, bufLen - logLen, bufLen - logLen - 1, - " \x1B[38;5;%dm%s\x1b[0m", ColorFromLevel(contentOut.level), contentOut.data + contentOut.tag_len); - logLen += ((ret > 0) ? ret : 0); - } else { - ret = snprintf_s(buffer + logLen, bufLen - logLen, bufLen - logLen - 1, - " %5d", contentOut.pid); - logLen += ((ret > 0) ? ret : 0); - ret = snprintf_s(buffer + logLen, bufLen - logLen, bufLen - logLen - 1, - " %5d", contentOut.tid); - logLen += ((ret > 0) ? ret : 0); - ret = snprintf_s(buffer + logLen, bufLen - logLen, bufLen - logLen - 1, - " %s ", ParsedFromLevel(contentOut.level)); - logLen += ((ret > 0) ? ret : 0); - ret = snprintf_s(buffer + logLen, bufLen - logLen, bufLen - logLen - 1, - "%05x/%s:", contentOut.domain & 0xFFFFF, contentOut.data); - logLen += ((ret > 0) ? ret : 0); - ret = snprintf_s(buffer + logLen, bufLen - logLen, bufLen - logLen - 1, - " %s", contentOut.data + contentOut.tag_len); + if (showFormat & (1 << COLOR_SHOWFORMAT)) { + ret = snprintf_s(buffer, bufLen, bufLen - logLen - 1, + "\x1B[38;5;%dm", ColorFromLevel(contentOut.level)); logLen += ((ret > 0) ? ret : 0); } + logLen += HilogShowTimeBuffer(buffer + logLen, bufLen - logLen, showFormat, contentOut); + ret = snprintf_s(buffer + logLen, bufLen - logLen, bufLen - logLen - 1, + " %5d", contentOut.pid); + logLen += ((ret > 0) ? ret : 0); + ret = snprintf_s(buffer + logLen, bufLen - logLen, bufLen - logLen - 1, + " %5d", contentOut.tid); + logLen += ((ret > 0) ? ret : 0); + ret = snprintf_s(buffer + logLen, bufLen - logLen, bufLen - logLen - 1, + " %s ", ParsedFromLevel(contentOut.level)); + logLen += ((ret > 0) ? ret : 0); + ret = snprintf_s(buffer + logLen, bufLen - logLen, bufLen - logLen - 1, + "%05x/%s:", contentOut.domain & 0xFFFFF, contentOut.data); + logLen += ((ret > 0) ? ret : 0); + ret = snprintf_s(buffer + logLen, bufLen - logLen, bufLen - logLen - 1, + " %s", contentOut.data + contentOut.tag_len); + logLen += ((ret > 0) ? ret : 0); + if (showFormat & (1 << COLOR_SHOWFORMAT)) { + const char suffixColor[] = "\x1B[0m"; + if (strcpy_s(buffer + logLen, sizeof(suffixColor), suffixColor) != 0) { + return; + } + logLen += strlen(suffixColor); + } } } } \ No newline at end of file diff --git a/frameworks/native/include/format.h b/frameworks/native/include/format.h index c74acae9d5ba3fb5a39a68dd64360670e79774ae..585a1218e68cb7606db241e31ddcc94b960a8310 100644 --- a/frameworks/native/include/format.h +++ b/frameworks/native/include/format.h @@ -21,7 +21,7 @@ namespace OHOS { namespace HiviewDFX { const char* ParsedFromLevel(uint16_t level); int ColorFromLevel(uint16_t level); -void HilogShowBuffer(char* buffer, int bufLen, const HilogShowFormatBuffer& contentOut, HilogShowFormat showFormat); +void HilogShowBuffer(char* buffer, int bufLen, const HilogShowFormatBuffer& contentOut, int32_t showFormat); } // namespace HiviewDFX } // namespace OHOS #endif /* LOG_FORMAT_H */ diff --git a/services/hilogd/log_persister.cpp b/services/hilogd/log_persister.cpp index 3c317daf8627a3417cfac4536f42840d1f0d1433..d83606dc49e4aa44ddeb625b443675741d5932e4 100644 --- a/services/hilogd/log_persister.cpp +++ b/services/hilogd/log_persister.cpp @@ -198,7 +198,7 @@ int GenPersistLogHeader(HilogData *data, list& persistList) *dataPos = 0; showBuffer.tag_len = offset; showBuffer.data = dataCopy; - HilogShowBuffer(buffer, MAX_LOG_LEN * 2, showBuffer, OFF_SHOWFORMAT); + HilogShowBuffer(buffer, MAX_LOG_LEN * 2, showBuffer, 0); persistList.push_back(buffer); offset += dataPos - dataBegin + 1; } else { @@ -211,7 +211,7 @@ int GenPersistLogHeader(HilogData *data, list& persistList) if (dataPos != dataBegin) { showBuffer.tag_len = offset; showBuffer.data = dataCopy; - HilogShowBuffer(buffer, MAX_LOG_LEN * 2, showBuffer, OFF_SHOWFORMAT); + HilogShowBuffer(buffer, MAX_LOG_LEN * 2, showBuffer, 0); persistList.push_back(buffer); } free(dataCopy); diff --git a/services/hilogd/log_querier.cpp b/services/hilogd/log_querier.cpp index f6d8393015110187f7a198ded7c0ecf474febc33..5e39e88ada5f2eb432c743059b8dabbfe91a12c2 100644 --- a/services/hilogd/log_querier.cpp +++ b/services/hilogd/log_querier.cpp @@ -37,7 +37,6 @@ #include "log_persister.h" #include "log_reader.h" - namespace OHOS { namespace HiviewDFX { using namespace std; @@ -107,7 +106,7 @@ int JobLauncher(const LogPersistStartMsg& pMsg, const HilogBuffer& buffer, bool return persistRes; } if (rotatorRes != 0) { - cout << "failed to open info file!" << endl; + cout << "Failed to open info file!" << endl; persister.reset(); return rotatorRes; } @@ -461,7 +460,7 @@ void SetCondition(std::shared_ptr logReader, const LogQueryRequest& q void LogQuerier::LogQuerierThreadFunc(std::shared_ptr logReader) { - cout << "Start log_querier thread!\n" << std::endl; + cout << "Start log_querier !\n" << std::endl; int readRes = 0; LogQueryRequest* qRstMsg = nullptr; NextRequest* nRstMsg = nullptr; diff --git a/services/hilogtool/include/log_controller.h b/services/hilogtool/include/log_controller.h index 1b7085ceda7a6c3d66bfa5e820b3cf92eee5d7d2..04128a94ee6a2b24a421e3f24203159d748ca679 100644 --- a/services/hilogtool/include/log_controller.h +++ b/services/hilogtool/include/log_controller.h @@ -34,7 +34,7 @@ inline void PrintBuffer(void* pBuff, unsigned int nLen); void NextRequestOp(SeqPacketSocketClient& controller, uint16_t sendId); void LogQueryRequestOp(SeqPacketSocketClient& controller, const HilogArgs* context); void LogQueryResponseOp(SeqPacketSocketClient& controller, char* recvBuffer, uint32_t bufLen, - HilogArgs* context, HilogShowFormat format); + HilogArgs* context, int32_t format); int32_t BufferSizeOp(SeqPacketSocketClient& controller, uint8_t msgCmd, const std::string& logTypeStr, const std::string& buffSizeStr); int32_t StatisticInfoOp(SeqPacketSocketClient& controller, uint8_t msgCmd, diff --git a/services/hilogtool/include/log_display.h b/services/hilogtool/include/log_display.h index 2f0a40285c4830347c83185a7d27ffbb1b9bfbf0..a301831f9a1fdb9972f5c8b7df82630647c38cf1 100644 --- a/services/hilogtool/include/log_display.h +++ b/services/hilogtool/include/log_display.h @@ -25,7 +25,7 @@ namespace HiviewDFX { using namespace std; int32_t ControlCmdResult(const char* message); std::string ParseErrorCode(ErrorCode errorCode); -void HilogShowLog(HilogShowFormat showFormat, HilogDataMessage* contentOut, +void HilogShowLog(int32_t showFormat, HilogDataMessage* contentOut, HilogArgs* context, vector& tailBuffer); HilogShowFormat HilogFormat (const char* formatArg); } // namespace HiviewDFX diff --git a/services/hilogtool/log_controller.cpp b/services/hilogtool/log_controller.cpp index 17f1e8102065c9709a2510fd02afb31c828e9ec4..076b0f2898328649beff805a0221b8b69ae3f794 100644 --- a/services/hilogtool/log_controller.cpp +++ b/services/hilogtool/log_controller.cpp @@ -211,7 +211,7 @@ void LogQueryRequestOp(SeqPacketSocketClient& controller, const HilogArgs* conte } void LogQueryResponseOp(SeqPacketSocketClient& controller, char* recvBuffer, uint32_t bufLen, - HilogArgs* context, HilogShowFormat format) + HilogArgs* context, int32_t format) { static std::vector tailBuffer; LogQueryResponse* rsp = reinterpret_cast(recvBuffer); diff --git a/services/hilogtool/log_display.cpp b/services/hilogtool/log_display.cpp index 1b956f03ded8f0eca425302486bb4f9b3d2916e0..ac000494b02cdd4e402248eb977a60bef06d2fc2 100644 --- a/services/hilogtool/log_display.cpp +++ b/services/hilogtool/log_display.cpp @@ -435,7 +435,7 @@ bool HilogMatchByRegex(string context, string regExpArg) } } -void HilogShowLog(HilogShowFormat showFormat, HilogDataMessage* data, HilogArgs* context, +void HilogShowLog(int32_t showFormat, HilogDataMessage* data, HilogArgs* context, vector& tailBuffer) { if (data->sendId == SENDIDN) { diff --git a/services/hilogtool/main.cpp b/services/hilogtool/main.cpp index f0d9bd6cf369394b1e0249d9ccf900ac711b31de..3c85b815ad743095579f7c48cbde347bc8c2c176 100644 --- a/services/hilogtool/main.cpp +++ b/services/hilogtool/main.cpp @@ -174,7 +174,7 @@ int HilogEntry(int argc, char* argv[]) regex delimiter(","); context.noBlockMode = 0; int32_t ret = 0; - HilogShowFormat showFormat = OFF_SHOWFORMAT; + int32_t showFormat = 0; int controlCount = 0; for (int argsCount = 0; argsCount < argc; argsCount++) { args.push_back(argv[argsCount]); @@ -295,7 +295,7 @@ int HilogEntry(int argc, char* argv[]) } break; case 'v': - showFormat = HilogFormat(optarg); + showFormat |= 1 << HilogFormat(optarg); break; case 'g': context.buffSizeArgs = "query"; @@ -605,7 +605,7 @@ int HilogEntry(int argc, char* argv[]) } default: - cout << "Invalid response from hilogd! response: " << msgHeader->msgType << endl; + cout << "Invalid response from hilogd! response: " << unsigned(msgHeader->msgType) << endl; break; } return 0;