1 /* 2 * Copyright (c) 2023 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #ifndef BASE_EVENTHANDLER_INTERFACES_INNER_API_EVENT_LOGGER_H 17 #define BASE_EVENTHANDLER_INTERFACES_INNER_API_EVENT_LOGGER_H 18 19 #include <cinttypes> 20 #include <functional> 21 #include <future> 22 #include <string> 23 #include <sstream> 24 25 #include "hilog/log.h" 26 27 namespace OHOS { 28 namespace AppExecFwk { 29 inline constexpr uint32_t EH_LOG_DOMAIN = 0xD001200; 30 31 class InnerFunctionTracer { 32 public: 33 using HilogFunc = std::function<int(const char *)>; 34 InnerFunctionTracer(HilogFunc logfn,const char * tag,LogLevel level)35 InnerFunctionTracer(HilogFunc logfn, const char* tag, LogLevel level) 36 : logfn_(logfn), tag_(tag), level_(level) 37 { 38 if (HiLogIsLoggable(OHOS::AppExecFwk::EH_LOG_DOMAIN, tag_, level_)) { 39 if (logfn_ != nullptr) { 40 logfn_("in %{public}s, enter"); 41 } 42 } 43 } ~InnerFunctionTracer()44 ~InnerFunctionTracer() 45 { 46 if (HiLogIsLoggable(OHOS::AppExecFwk::EH_LOG_DOMAIN, tag_, level_)) { 47 if (logfn_ != nullptr) { 48 logfn_("in %{public}s, leave"); 49 } 50 } 51 } 52 private: 53 HilogFunc logfn_ { nullptr }; 54 const char* tag_ { nullptr }; 55 LogLevel level_ { LOG_LEVEL_MIN }; 56 }; 57 } // namespace AppExecFwk 58 } // namespace OHOS 59 60 #ifndef EH_FUNC_FMT 61 #define EH_FUNC_FMT "in %{public}s:%{public}d, " 62 #endif 63 64 #ifndef EH_FUNC_INFO 65 #define EH_FUNC_INFO __FUNCTION__, __LINE__ 66 #endif 67 68 #ifndef EH_FILE_NAME 69 #define EH_FILE_NAME (strrchr((__FILE__), '/') ? strrchr((__FILE__), '/') + 1 : (__FILE__)) 70 #endif 71 72 #ifndef EH_LINE_INFO 73 #define EH_LINE_INFO EH_FILE_NAME, __LINE__ 74 #endif 75 76 #define DEFINE_EH_HILOG_LABEL(name) \ 77 static const constexpr char* EH_LOG_LABEL = (name) 78 79 #define HILOGD(fmt, ...) do { \ 80 if (HiLogIsLoggable(OHOS::AppExecFwk::EH_LOG_DOMAIN, EH_LOG_LABEL, LOG_DEBUG)) { \ 81 ((void)HILOG_IMPL(LOG_CORE, LOG_INFO, EH_LOG_DOMAIN, EH_LOG_LABEL, fmt, ##__VA_ARGS__)); \ 82 } \ 83 } while (0) 84 85 #define HILOGI(fmt, ...) do { \ 86 ((void)HILOG_IMPL(LOG_CORE, LOG_INFO, EH_LOG_DOMAIN, EH_LOG_LABEL, fmt, ##__VA_ARGS__)); \ 87 } while (0) 88 89 #define HILOGW(fmt, ...) do { \ 90 ((void)HILOG_IMPL(LOG_CORE, LOG_WARN, EH_LOG_DOMAIN, EH_LOG_LABEL, fmt, ##__VA_ARGS__)); \ 91 } while (0) 92 93 #define HILOGE(fmt, ...) do { \ 94 ((void)HILOG_IMPL(LOG_CORE, LOG_ERROR, EH_LOG_DOMAIN, EH_LOG_LABEL, fmt, ##__VA_ARGS__)); \ 95 } while (0) 96 97 #define HILOGF(fmt, ...) do { \ 98 ((void)HILOG_IMPL(LOG_CORE, LOG_FATAL, EH_LOG_DOMAIN, EH_LOG_LABEL, fmt, ##__VA_ARGS__)); \ 99 } while (0) 100 101 #ifndef EH_CALL_DEBUG_ENTER 102 #define EH_CALL_DEBUG_ENTER ::OHOS::AppExecFwk::InnerFunctionTracer ___innerFuncTracer_Debug___ \ 103 { std::bind(&::OHOS::HiviewDFX::HiLog::Debug, EH_LOG_LABEL, std::placeholders::_1, \ 104 __FUNCTION__), EH_LOG_LABEL.tag, LOG_DEBUG } 105 #endif // EH_CALL_DEBUG_ENTER 106 107 #ifndef EH_CALL_INFO_TRACE 108 #define EH_CALL_INFO_TRACE ::OHOS::AppExecFwk::InnerFunctionTracer ___innerFuncTracer_Info___ \ 109 { std::bind(&::OHOS::HiviewDFX::HiLog::Info, EH_LOG_LABEL, std::placeholders::_1, \ 110 __FUNCTION__), EH_LOG_LABEL.tag, LOG_INFO } 111 #endif // EH_CALL_INFO_TRACE 112 113 #ifndef EH_CALL_TEST_DEBUG 114 #define EH_CALL_TEST_DEBUG ::OHOS::AppExecFwk::InnerFunctionTracer ___innerFuncTracer_Info___ \ 115 { std::bind(&::OHOS::HiviewDFX::HiLog::Info, EH_LOG_LABEL, std::placeholders::_1, \ 116 (test_info_ == nullptr ? "TestBody" : test_info_->name())), EH_LOG_LABEL.tag, LOG_DEBUG } 117 #endif // EH_CALL_TEST_DEBUG 118 119 #endif // BASE_EVENTHANDLER_INTERFACES_INNER_API_EVENT_LOGGER_H 120