1 /*
2 * Copyright (c) 2024 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 OHOS_AAFWK_HILOG_TAG_WRAPPER_H
17 #define OHOS_AAFWK_HILOG_TAG_WRAPPER_H
18
19 #include <cinttypes>
20 #include <map>
21
22 #include "hilog/log.h"
23
24 #ifndef AAFWK_FUNC_FMT
25 #define AAFWK_FUNC_FMT "[%{public}s:%{public}d]"
26 #endif
27
28 #ifndef AAFWK_FILE_NAME
29 #define AAFWK_FILE_NAME (__builtin_strrchr(__FILE__, '/') ? __builtin_strrchr(__FILE__, '/') + 1 : __FILE__)
30 #endif
31
32 #ifndef AAFWK_FUNC_INFO
33 #define AAFWK_FUNC_INFO AAFWK_FILE_NAME, __LINE__
34 #endif
35
36
37 namespace OHOS::AAFwk {
38 enum class AAFwkLogTag : uint32_t {
39 DEFAULT = 0xD001300, // 0XD001300
40 ABILITY,
41 TEST,
42 AA_TOOL,
43 ABILITY_SIM,
44
45 APPDFR = DEFAULT + 0x10, // 0xD001310
46 APPMGR,
47 DBOBSMGR,
48 DIALOG,
49 QUICKFIX,
50 URIPERMMGR,
51 BUNDLEMGRHELPER,
52 APPKIT,
53
54 JSENV = DEFAULT + 0x20, // 0xD001320
55 JSRUNTIME,
56 FA,
57 INTENT,
58 JSNAPI,
59 CJRUNTIME,
60
61 DELEGATOR = DEFAULT + 0x30, // 0xD001330
62 CONTEXT,
63 UIABILITY,
64 WANT,
65 MISSION,
66 CONNECTION,
67 ABILITYMGR,
68 ECOLOGICAL_RULE,
69 DATA_ABILITY,
70
71 EXT = DEFAULT + 0x40, // 0xD001340
72 AUTOFILL_EXT,
73 SERVICE_EXT,
74 FORM_EXT,
75 SHARE_EXT,
76 UI_EXT,
77 ACTION_EXT,
78 EMBEDDED_EXT,
79
80 WANTAGENT = DEFAULT + 0x50, // 0xD001350
81 AUTOFILLMGR,
82 EXTMGR,
83 SER_ROUTER,
84 AUTO_STARTUP,
85 STARTUP,
86 RECOVERY,
87 PROCESSMGR,
88 CONTINUATION,
89 DISTRIBUTED,
90 FREE_INSTALL,
91
92 LOCAL_CALL = DEFAULT + 0x60, // 0xD001360
93 FILE_MONITOR,
94
95 END = 256, // N.B. never use it
96 };
97
GetOffset(AAFwkLogTag tag,AAFwkLogTag base)98 inline uint32_t GetOffset(AAFwkLogTag tag, AAFwkLogTag base)
99 {
100 return static_cast<uint32_t>(tag) - static_cast<uint32_t>(base);
101 }
102
GetDomainName0(AAFwkLogTag tag)103 inline const char* GetDomainName0(AAFwkLogTag tag)
104 {
105 const char* tagNames[] = { "AAFwk", "Ability", "Test", "AATool", "Simulator" };
106 uint32_t offset = GetOffset(tag, AAFwkLogTag::DEFAULT);
107 if (offset >= sizeof(tagNames) / sizeof(const char*)) {
108 return "UN";
109 }
110 return tagNames[offset];
111 }
112
GetDomainName1(AAFwkLogTag tag)113 inline const char* GetDomainName1(AAFwkLogTag tag)
114 {
115 const char* tagNames[] = { "AppDfr", "AppMS", "DbObsMgr", "Dialog", "Quickfix",
116 "UriPermMgr", "BMSHelper", "AppKit" };
117 uint32_t offset = GetOffset(tag, AAFwkLogTag::APPDFR);
118 if (offset >= sizeof(tagNames) / sizeof(const char*)) {
119 return "UN";
120 }
121 return tagNames[offset];
122 }
123
GetDomainName2(AAFwkLogTag tag)124 inline const char* GetDomainName2(AAFwkLogTag tag)
125 {
126 const char* tagNames[] = { "JsEnv", "JsRuntime", "FA", "Intent", "JsNapi" };
127 uint32_t offset = GetOffset(tag, AAFwkLogTag::JSENV);
128 if (offset >= sizeof(tagNames) / sizeof(const char*)) {
129 return "UN";
130 }
131 return tagNames[offset];
132 }
133
GetDomainName3(AAFwkLogTag tag)134 inline const char* GetDomainName3(AAFwkLogTag tag)
135 {
136 const char* tagNames[] = { "Delegator", "Context", "UIAbility", "Want", "Mission",
137 "Connection", "AMS", "EcologicalRule", "DataAbility" };
138 uint32_t offset = GetOffset(tag, AAFwkLogTag::DELEGATOR);
139 if (offset >= sizeof(tagNames) / sizeof(const char*)) {
140 return "UN";
141 }
142 return tagNames[offset];
143 }
144
GetDomainName4(AAFwkLogTag tag)145 inline const char* GetDomainName4(AAFwkLogTag tag)
146 {
147 const char* tagNames[] = { "Ext", "AutoFillExt", "ServiceExt", "FormExt", "ShareExt",
148 "UIExt", "ActionExt", "EmbeddedExt" };
149 uint32_t offset = GetOffset(tag, AAFwkLogTag::EXT);
150 if (offset >= sizeof(tagNames) / sizeof(const char*)) {
151 return "UN";
152 }
153 return tagNames[offset];
154 }
155
GetDomainName5(AAFwkLogTag tag)156 inline const char* GetDomainName5(AAFwkLogTag tag)
157 {
158 const char* tagNames[] = { "WantAgent", "AutoFillMgr", "ExtMgr", "ServiceRouter",
159 "AutoStartup", "Startup", "Recovery", "ProcessMgr", "Continuation",
160 "Distributed", "FreeInstall" };
161 uint32_t offset = GetOffset(tag, AAFwkLogTag::WANTAGENT);
162 if (offset >= sizeof(tagNames) / sizeof(const char*)) {
163 return "UN";
164 }
165 return tagNames[offset];
166 }
167
GetDomainName6(AAFwkLogTag tag)168 inline const char* GetDomainName6(AAFwkLogTag tag)
169 {
170 const char* tagNames[] = { "LocalCall", "FileMonitor" };
171 uint32_t offset = GetOffset(tag, AAFwkLogTag::LOCAL_CALL);
172 if (offset >= sizeof(tagNames) / sizeof(const char*)) {
173 return "UN";
174 }
175 return tagNames[offset];
176 }
177
178 constexpr uint32_t BASE_DEFAULT = 0;
179 constexpr uint32_t BASE_APPDFR = 1;
180 constexpr uint32_t BASE_JSENV = 2;
181 constexpr uint32_t BASE_DELEGATOR = 3;
182 constexpr uint32_t BASE_EXT = 4;
183 constexpr uint32_t BASE_WANTAGENT = 5;
184 constexpr uint32_t BASE_LOCAL_CALL = 6;
185
GetTagInfoFromDomainId(AAFwkLogTag tag)186 static inline const char* GetTagInfoFromDomainId(AAFwkLogTag tag)
187 {
188 uint32_t offset = GetOffset(tag, AAFwkLogTag::DEFAULT);
189 uint32_t base = offset >> 4;
190 switch (base) {
191 case BASE_DEFAULT: return GetDomainName0(tag);
192 case BASE_APPDFR: return GetDomainName1(tag);
193 case BASE_JSENV: return GetDomainName2(tag);
194 case BASE_DELEGATOR: return GetDomainName3(tag);
195 case BASE_EXT: return GetDomainName4(tag);
196 case BASE_WANTAGENT: return GetDomainName5(tag);
197 case BASE_LOCAL_CALL: return GetDomainName6(tag);
198 default: return "UN";
199 }
200 }
201 } // OHOS::AAFwk
202
203 using AAFwkTag = OHOS::AAFwk::AAFwkLogTag;
204
205 #define AAFWK_PRINT_LOG(level, tag, fmt, ...) \
206 do { \
207 AAFwkTag logTag = tag; \
208 ((void)HILOG_IMPL(LOG_CORE, level, static_cast<uint32_t>(logTag), \
209 OHOS::AAFwk::GetTagInfoFromDomainId(logTag), AAFWK_FUNC_FMT fmt, AAFWK_FUNC_INFO, ##__VA_ARGS__)); \
210 } while (0)
211
212 #define TAG_LOGD(tag, fmt, ...) AAFWK_PRINT_LOG(LOG_DEBUG, tag, fmt, ##__VA_ARGS__)
213 #define TAG_LOGI(tag, fmt, ...) AAFWK_PRINT_LOG(LOG_INFO, tag, fmt, ##__VA_ARGS__)
214 #define TAG_LOGW(tag, fmt, ...) AAFWK_PRINT_LOG(LOG_WARN, tag, fmt, ##__VA_ARGS__)
215 #define TAG_LOGE(tag, fmt, ...) AAFWK_PRINT_LOG(LOG_ERROR, tag, fmt, ##__VA_ARGS__)
216 #define TAG_LOGF(tag, fmt, ...) AAFWK_PRINT_LOG(LOG_FATAL, tag, fmt, ##__VA_ARGS__)
217
218 #endif // OHOS_AAFWK_HILOG_TAG_WRAPPER_H
219