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 DSOFTBUS_SOFTBUS_LOG_H
17 #define DSOFTBUS_SOFTBUS_LOG_H
18 
19 #include <inttypes.h>
20 #include <stdint.h>
21 #include <stdio.h>
22 
23 #if defined(SOFTBUS_LITEOS_M)
24 #include "hilog_lite/log.h"
25 #else
26 #include "hilog/log.h"
27 #endif
28 
29 #ifdef __cplusplus
30 extern "C" {
31 #endif
32 
33 #if defined(__ICCARM__) || defined(__LITEOS_M__)
34 #define SOFTBUS_DPRINTF(fd, fmt, ...)
35 #else
36 #define SOFTBUS_DPRINTF(fd, fmt, ...) dprintf(fd, fmt, ##__VA_ARGS__)
37 #endif
38 
39 #define LOG_TAG_MAX_LEN       16
40 #define MODULE_DOMAIN_MAX_LEN 32
41 #define LOG_LINE_MAX_LENGTH   512
42 #define NSTACKX_LOG_DOMAIN    0xd0057ff
43 #define DOMAIN_ID_TEST        0xd000f00
44 
45 #define FILE_NAME   (__builtin_strrchr("/" __FILE_NAME__, '/') + 1)
46 #ifdef BUILD_VARIANT_ENG
47 #define FORMAT(fmt) "[%{public}s:%{public}d] %{public}s# " fmt
48 #else
49 #define FORMAT(fmt) "%{public}s# " fmt
50 #endif
51 
52 /* For inner use only */
53 #if defined(SOFTBUS_LITEOS_M)
54 #ifdef BUILD_VARIANT_ENG
55 #define SOFTBUS_LOGF_INNER(label, fmt, ...) \
56     HILOG_FATAL(HILOG_MODULE_SOFTBUS, FORMAT(fmt), FILE_NAME, __LINE__, __FUNCTION__, ##__VA_ARGS__)
57 #define SOFTBUS_LOGE_INNER(label, fmt, ...) \
58     HILOG_ERROR(HILOG_MODULE_SOFTBUS, FORMAT(fmt), FILE_NAME, __LINE__, __FUNCTION__, ##__VA_ARGS__)
59 #define SOFTBUS_LOGW_INNER(label, fmt, ...) \
60     HILOG_WARN(HILOG_MODULE_SOFTBUS, FORMAT(fmt), FILE_NAME, __LINE__, __FUNCTION__, ##__VA_ARGS__)
61 #define SOFTBUS_LOGI_INNER(label, fmt, ...) \
62     HILOG_INFO(HILOG_MODULE_SOFTBUS, FORMAT(fmt), FILE_NAME, __LINE__, __FUNCTION__, ##__VA_ARGS__)
63 #define SOFTBUS_LOGD_INNER(label, fmt, ...) \
64     HILOG_DEBUG(HILOG_MODULE_SOFTBUS, FORMAT(fmt), FILE_NAME, __LINE__, __FUNCTION__, ##__VA_ARGS__)
65 #else
66 #define SOFTBUS_LOGF_INNER(label, fmt, ...) HILOG_FATAL(HILOG_MODULE_SOFTBUS, FORMAT(fmt), __FUNCTION__, ##__VA_ARGS__)
67 #define SOFTBUS_LOGE_INNER(label, fmt, ...) HILOG_ERROR(HILOG_MODULE_SOFTBUS, FORMAT(fmt), __FUNCTION__, ##__VA_ARGS__)
68 #define SOFTBUS_LOGW_INNER(label, fmt, ...) HILOG_WARN(HILOG_MODULE_SOFTBUS, FORMAT(fmt), __FUNCTION__, ##__VA_ARGS__)
69 #define SOFTBUS_LOGI_INNER(label, fmt, ...) HILOG_INFO(HILOG_MODULE_SOFTBUS, FORMAT(fmt), __FUNCTION__, ##__VA_ARGS__)
70 #define SOFTBUS_LOGD_INNER(label, fmt, ...) HILOG_DEBUG(HILOG_MODULE_SOFTBUS, FORMAT(fmt), __FUNCTION__, ##__VA_ARGS__)
71 #endif
72 #elif defined(SOFTBUS_LITEOS_A)
73 #ifdef BUILD_VARIANT_ENG
74 #define SOFTBUS_LOG_INNER(level, label, fmt, ...) \
75     (void)HiLogPrint(                             \
76         LOG_CORE, level, label.domain, label.tag, FORMAT(fmt), FILE_NAME, __LINE__, __FUNCTION__, ##__VA_ARGS__)
77 #else
78 #define SOFTBUS_LOG_INNER(level, label, fmt, ...) \
79     (void)HiLogPrint(LOG_CORE, level, label.domain, label.tag, FORMAT(fmt), __FUNCTION__, ##__VA_ARGS__)
80 #endif
81 #else
82 #ifdef BUILD_VARIANT_ENG
83 #define SOFTBUS_LOG_INNER(level, label, fmt, ...) \
84     (void)HILOG_IMPL(                             \
85         LOG_CORE, level, label.domain, label.tag, FORMAT(fmt), FILE_NAME, __LINE__, __FUNCTION__, ##__VA_ARGS__)
86 #else
87 #define SOFTBUS_LOG_INNER(level, label, fmt, ...) \
88     (void)HILOG_IMPL(                             \
89         LOG_CORE, level, label.domain, label.tag, FORMAT(fmt), __FUNCTION__, ##__VA_ARGS__)
90 #endif
91 #endif
92 
93 typedef struct {
94     int32_t label;
95     uint32_t domain;
96     char tag[LOG_TAG_MAX_LEN];
97 } SoftBusLogLabel;
98 
99 void NstackxLogInnerImpl(const char *moduleName, uint32_t logLevel, const char *fmt, ...);
100 
101 #define CHECK_AND_RETURN_RET_LOG_INNER(cond, ret, log, label, fmt, ...) \
102     do {                                                                \
103         if (!(cond)) {                                                  \
104             log(label, fmt, ##__VA_ARGS__);                             \
105             return ret;                                                 \
106         }                                                               \
107     } while (0)
108 
109 #define CHECK_AND_RETURN_LOG_INNER(cond, log, label, fmt, ...) \
110     do {                                                       \
111         if (!(cond)) {                                         \
112             log(label, fmt, ##__VA_ARGS__);                    \
113             return;                                            \
114         }                                                      \
115     } while (0)
116 
117 #ifdef __cplusplus
118 }
119 #endif
120 #endif // DSOFTBUS_SOFTBUS_LOG_H
121