From eeca038f0927e429484ea6ba05078a953b5d052a Mon Sep 17 00:00:00 2001 From: aajwy <13051180828@163.com> Date: Fri, 22 Oct 2021 07:55:11 +0000 Subject: [PATCH] =?UTF-8?q?=EF=BC=82format=E6=B7=B7=E5=90=88=E4=BD=BF?= =?UTF-8?q?=E7=94=A8=E9=97=AE=E9=A2=98=EF=BC=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: aajwy <13051180828@163.com> --- frameworks/native/format.cpp | 130 ++++++++------------ frameworks/native/include/format.h | 2 +- services/hilogd/log_persister.cpp | 4 +- services/hilogd/log_querier.cpp | 5 +- services/hilogtool/include/log_controller.h | 2 +- services/hilogtool/include/log_display.h | 2 +- services/hilogtool/log_controller.cpp | 2 +- services/hilogtool/log_display.cpp | 2 +- services/hilogtool/main.cpp | 6 +- 9 files changed, 66 insertions(+), 89 deletions(-) diff --git a/frameworks/native/format.cpp b/frameworks/native/format.cpp index b814ed7..d4ad608 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 c74acae..585a121 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 3c317da..d83606d 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 f6d8393..5e39e88 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 1b7085c..04128a9 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 2f0a402..a301831 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 17f1e81..076b0f2 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 1b956f0..ac00049 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 f0d9bd6..3c85b81 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; -- Gitee