xref: /foundation/arkui/napi/utils/log.h (revision 33eb0b6d)
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)
31enum class LogLevel : uint32_t {
32    Debug = 0,
33    Info,
34    Warn,
35    Error,
36    Fatal,
37};
38
39NAPI_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
69static 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