1  /*
2   * Copyright (c) 2022-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  #ifndef DFX_MUSL_LOG_H
16  #define DFX_MUSL_LOG_H
17  
18  #include <inttypes.h>
19  #include <stdarg.h>
20  #include <stddef.h>
21  
22  #include "dfx_log_define.h"
23  
24  #ifdef __cplusplus
25  extern "C" {
26  #endif
27  
28  #ifdef ENABLE_SIGHAND_MUSL_LOG
29  
30  /* Log type */
31  typedef enum {
32      /* min log type */
33      LOG_TYPE_MIN = 0,
34      /* Used by app log. */
35      LOG_APP = 0,
36      /* Log to kmsg, only used by init phase. */
37      LOG_INIT = 1,
38      /* Used by core service, framework. */
39      LOG_CORE = 3,
40      /* Used by kmsg log. */
41      LOG_KMSG = 4,
42      /* max log type */
43      LOG_TYPE_MAX
44  } LogType;
45  
46  /* Log level */
47  typedef enum {
48      /* min log level */
49      LOG_LEVEL_MIN = 0,
50      /* Designates lower priority log. */
51      LOG_DEBUG = 3,
52      /* Designates useful information. */
53      LOG_INFO = 4,
54      /* Designates hazardous situations. */
55      LOG_WARN = 5,
56      /* Designates very serious errors. */
57      LOG_ERROR = 6,
58      /* Designates major fatal anomaly. */
59      LOG_FATAL = 7,
60      /* max log level */
61      LOG_LEVEL_MAX,
62  } LogLevel;
63  
64  extern int HiLogAdapterPrintArgs(
65      const LogType type, const LogLevel level, const unsigned int domain, const char *tag, const char *fmt, va_list ap);
66  extern int vsnprintfp_s(char *strDest, size_t destMax, size_t count, int priv, const char *format, va_list arglist);
67  
68  __attribute__ ((visibility("hidden"))) int MuslHiLogPrinter(
69      LogType type, LogLevel level, unsigned int domain, const char *tag, const char *fmt, ...);
70  
71  __attribute__ ((visibility("hidden"))) int DfxLogPrint(
72      const LogLevel logLevel, const unsigned int domain, const char* tag, const char *fmt, ...);
73  
74  #define DFXLOG_PRINT(prio, ...) DfxLogPrint(prio, LOG_DOMAIN, LOG_TAG, ##__VA_ARGS__)
75  
76  #define DFXLOG_DEBUG(...) DFXLOG_PRINT(LOG_DEBUG, ##__VA_ARGS__)
77  #define DFXLOG_INFO(...) DFXLOG_PRINT(LOG_INFO, ##__VA_ARGS__)
78  #define DFXLOG_WARN(...) DFXLOG_PRINT(LOG_WARN, ##__VA_ARGS__)
79  #define DFXLOG_ERROR(...) DFXLOG_PRINT(LOG_ERROR, ##__VA_ARGS__)
80  #define DFXLOG_FATAL(...) DFXLOG_PRINT(LOG_FATAL, ##__VA_ARGS__)
81  
82  #else
83  
84  #define DFXLOG_PRINT(prio, ...)
85  
86  #define DFXLOG_DEBUG(...)
87  #define DFXLOG_INFO(...)
88  #define DFXLOG_WARN(...)
89  #define DFXLOG_ERROR(...)
90  #define DFXLOG_FATAL(...)
91  #endif
92  
93  #ifdef __cplusplus
94  }
95  #endif
96  #endif