1  /*
2   * Copyright (c) 2021 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 FOUNDATION_ACE_NAPI_UTILS_LOG_H
17  #define FOUNDATION_ACE_NAPI_UTILS_LOG_H
18  
19  #ifdef LINUX_PLATFORM
20  #include <cstdint>
21  #endif /* LINUX_PLATFORM */
22  #include <cstring>
23  #include <string>
24  
25  #include "utils/macros.h"
26  
27  #define __FILENAME__ strrchr(__FILE__, '/') + 1
28  
29  #if defined(MAC_PLATFORM) || defined(WINDOWS_PLATFORM) || defined(ANDROID_PLATFORM) || defined(IOS_PLATFORM) || \
30      defined(LINUX_PLATFORM)
31  enum class LogLevel : uint32_t {
32      Debug = 0,
33      Info,
34      Warn,
35      Error,
36      Fatal,
37  };
38  
39  NAPI_EXPORT void PrintLog(LogLevel level, const char* fmt, ...);
40  
41  #define HILOG_PRINT(Level, fmt, ...) \
42      PrintLog(LogLevel::Level, "[%-20s(%s)] " fmt, __FILENAME__, __FUNCTION__, ##__VA_ARGS__)
43  
44  #define HILOG_FATAL(fmt, ...)                               \
45      do {                                                    \
46          HILOG_PRINT(Error, fmt, ##__VA_ARGS__);             \
47          abort();                                            \
48      } while (0)
49  #define HILOG_ERROR(fmt, ...) HILOG_PRINT(Error, fmt, ##__VA_ARGS__)
50  #define HILOG_WARN(fmt, ...) HILOG_PRINT(Warn, fmt, ##__VA_ARGS__)
51  #define HILOG_INFO(fmt, ...) HILOG_PRINT(Info, fmt, ##__VA_ARGS__)
52  #define HILOG_DEBUG(fmt, ...) HILOG_PRINT(Debug, fmt, ##__VA_ARGS__)
53  
54  #else
55  
56  #include "hilog/log.h"
57  
58  #undef LOG_DOMAIN
59  #undef LOG_TAG
60  #undef HILOG_FATAL
61  #undef HILOG_ERROR
62  #undef HILOG_WARN
63  #undef HILOG_INFO
64  #undef HILOG_DEBUG
65  
66  #define LOG_DOMAIN 0xD003F01
67  #define LOG_TAG "NAPI"
68  
69  static constexpr OHOS::HiviewDFX::HiLogLabel LOG_LABEL = { LOG_CORE, LOG_DOMAIN, LOG_TAG };
70  
71  #define HILOG_PRINT(Level, fmt, ...)     \
72      (void)OHOS::HiviewDFX::HiLog::Level( \
73          LOG_LABEL, "[(%{public}s:%{public}d)(%{public}s)] " fmt, __FILENAME__, __LINE__, __FUNCTION__, ##__VA_ARGS__)
74  
75  #define HILOG_FATAL(fmt, ...)                                       \
76      do {                                                            \
77          ((void)HILOG_IMPL(LOG_CORE, LOG_FATAL, LOG_DOMAIN, LOG_TAG, \
78              "[(%{public}s:%{public}d)(%{public}s)] " fmt,           \
79              __FILENAME__, __LINE__, __FUNCTION__, ##__VA_ARGS__));  \
80          abort();                                                    \
81      } while (0)
82  #define HILOG_ERROR(fmt, ...) \
83      ((void)HILOG_IMPL(LOG_CORE, LOG_ERROR, LOG_DOMAIN, LOG_TAG, \
84      "[(%{public}s:%{public}d)(%{public}s)] " fmt, __FILENAME__, __LINE__, __FUNCTION__, ##__VA_ARGS__))
85  #define HILOG_WARN(fmt, ...) \
86      ((void)HILOG_IMPL(LOG_CORE, LOG_WARN, LOG_DOMAIN, LOG_TAG, \
87      "[(%{public}s:%{public}d)(%{public}s)] " fmt, __FILENAME__, __LINE__, __FUNCTION__, ##__VA_ARGS__))
88  #define HILOG_INFO(fmt, ...) \
89      ((void)HILOG_IMPL(LOG_CORE, LOG_INFO, LOG_DOMAIN, LOG_TAG, \
90      "[(%{public}s:%{public}d)(%{public}s)] " fmt, __FILENAME__, __LINE__, __FUNCTION__, ##__VA_ARGS__))
91  #define HILOG_DEBUG(fmt, ...) \
92      ((void)HILOG_IMPL(LOG_CORE, LOG_DEBUG, LOG_DOMAIN, LOG_TAG, \
93      "[(%{public}s:%{public}d)(%{public}s)] " fmt, __FILENAME__, __LINE__, __FUNCTION__, ##__VA_ARGS__))
94  
95  #endif /* MAC_PLATFORM */
96  
97  #define LOG_IF_SPECIAL(condition, fmt, ...) \
98      if ((condition)) {                      \
99          HILOG_FATAL(fmt, ##__VA_ARGS__);    \
100      } else {                                \
101          HILOG_ERROR(fmt, ##__VA_ARGS__);    \
102      }
103  
104  #endif /* FOUNDATION_ACE_NAPI_UTILS_LOG_H */
105