xref: /aosp_15_r20/external/ot-br-posix/src/common/logging.hpp (revision 4a64e381480ef79f0532b2421e44e6ee336b8e0d)
1*4a64e381SAndroid Build Coastguard Worker /*
2*4a64e381SAndroid Build Coastguard Worker  *    Copyright (c) 2017, The OpenThread Authors.
3*4a64e381SAndroid Build Coastguard Worker  *    All rights reserved.
4*4a64e381SAndroid Build Coastguard Worker  *
5*4a64e381SAndroid Build Coastguard Worker  *    Redistribution and use in source and binary forms, with or without
6*4a64e381SAndroid Build Coastguard Worker  *    modification, are permitted provided that the following conditions are met:
7*4a64e381SAndroid Build Coastguard Worker  *    1. Redistributions of source code must retain the above copyright
8*4a64e381SAndroid Build Coastguard Worker  *       notice, this list of conditions and the following disclaimer.
9*4a64e381SAndroid Build Coastguard Worker  *    2. Redistributions in binary form must reproduce the above copyright
10*4a64e381SAndroid Build Coastguard Worker  *       notice, this list of conditions and the following disclaimer in the
11*4a64e381SAndroid Build Coastguard Worker  *       documentation and/or other materials provided with the distribution.
12*4a64e381SAndroid Build Coastguard Worker  *    3. Neither the name of the copyright holder nor the
13*4a64e381SAndroid Build Coastguard Worker  *       names of its contributors may be used to endorse or promote products
14*4a64e381SAndroid Build Coastguard Worker  *       derived from this software without specific prior written permission.
15*4a64e381SAndroid Build Coastguard Worker  *
16*4a64e381SAndroid Build Coastguard Worker  *    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17*4a64e381SAndroid Build Coastguard Worker  *    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18*4a64e381SAndroid Build Coastguard Worker  *    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19*4a64e381SAndroid Build Coastguard Worker  *    ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
20*4a64e381SAndroid Build Coastguard Worker  *    LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21*4a64e381SAndroid Build Coastguard Worker  *    CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22*4a64e381SAndroid Build Coastguard Worker  *    SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23*4a64e381SAndroid Build Coastguard Worker  *    INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24*4a64e381SAndroid Build Coastguard Worker  *    CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25*4a64e381SAndroid Build Coastguard Worker  *    ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26*4a64e381SAndroid Build Coastguard Worker  *    POSSIBILITY OF SUCH DAMAGE.
27*4a64e381SAndroid Build Coastguard Worker  */
28*4a64e381SAndroid Build Coastguard Worker 
29*4a64e381SAndroid Build Coastguard Worker /**
30*4a64e381SAndroid Build Coastguard Worker  * @file
31*4a64e381SAndroid Build Coastguard Worker  * This file define logging interface.
32*4a64e381SAndroid Build Coastguard Worker  */
33*4a64e381SAndroid Build Coastguard Worker #ifndef OTBR_COMMON_LOGGING_HPP_
34*4a64e381SAndroid Build Coastguard Worker #define OTBR_COMMON_LOGGING_HPP_
35*4a64e381SAndroid Build Coastguard Worker 
36*4a64e381SAndroid Build Coastguard Worker #include "openthread-br/config.h"
37*4a64e381SAndroid Build Coastguard Worker 
38*4a64e381SAndroid Build Coastguard Worker #include <stdarg.h>
39*4a64e381SAndroid Build Coastguard Worker #include <stddef.h>
40*4a64e381SAndroid Build Coastguard Worker 
41*4a64e381SAndroid Build Coastguard Worker #ifndef OTBR_LOG_TAG
42*4a64e381SAndroid Build Coastguard Worker #error "OTBR_LOG_TAG is not defined"
43*4a64e381SAndroid Build Coastguard Worker #endif
44*4a64e381SAndroid Build Coastguard Worker 
45*4a64e381SAndroid Build Coastguard Worker #include "common/types.hpp"
46*4a64e381SAndroid Build Coastguard Worker 
47*4a64e381SAndroid Build Coastguard Worker /**
48*4a64e381SAndroid Build Coastguard Worker  * Logging level.
49*4a64e381SAndroid Build Coastguard Worker  */
50*4a64e381SAndroid Build Coastguard Worker typedef enum
51*4a64e381SAndroid Build Coastguard Worker {
52*4a64e381SAndroid Build Coastguard Worker     OTBR_LOG_EMERG,   ///< System is unusable
53*4a64e381SAndroid Build Coastguard Worker     OTBR_LOG_ALERT,   ///< Action must be taken immediately
54*4a64e381SAndroid Build Coastguard Worker     OTBR_LOG_CRIT,    ///< Critical conditions
55*4a64e381SAndroid Build Coastguard Worker     OTBR_LOG_ERR,     ///< Error conditions
56*4a64e381SAndroid Build Coastguard Worker     OTBR_LOG_WARNING, ///< Warning conditions
57*4a64e381SAndroid Build Coastguard Worker     OTBR_LOG_NOTICE,  ///< Normal but significant condition
58*4a64e381SAndroid Build Coastguard Worker     OTBR_LOG_INFO,    ///< Informational
59*4a64e381SAndroid Build Coastguard Worker     OTBR_LOG_DEBUG,   ///< Debug level messages
60*4a64e381SAndroid Build Coastguard Worker } otbrLogLevel;
61*4a64e381SAndroid Build Coastguard Worker 
62*4a64e381SAndroid Build Coastguard Worker /**
63*4a64e381SAndroid Build Coastguard Worker  * Get current log level.
64*4a64e381SAndroid Build Coastguard Worker  */
65*4a64e381SAndroid Build Coastguard Worker otbrLogLevel otbrLogGetLevel(void);
66*4a64e381SAndroid Build Coastguard Worker 
67*4a64e381SAndroid Build Coastguard Worker /**
68*4a64e381SAndroid Build Coastguard Worker  * Get default log level.
69*4a64e381SAndroid Build Coastguard Worker  */
70*4a64e381SAndroid Build Coastguard Worker otbrLogLevel otbrLogGetDefaultLevel(void);
71*4a64e381SAndroid Build Coastguard Worker 
72*4a64e381SAndroid Build Coastguard Worker /**
73*4a64e381SAndroid Build Coastguard Worker  * Set current log level.
74*4a64e381SAndroid Build Coastguard Worker  */
75*4a64e381SAndroid Build Coastguard Worker void otbrLogSetLevel(otbrLogLevel aLevel);
76*4a64e381SAndroid Build Coastguard Worker 
77*4a64e381SAndroid Build Coastguard Worker /**
78*4a64e381SAndroid Build Coastguard Worker  * Control log to syslog.
79*4a64e381SAndroid Build Coastguard Worker  *
80*4a64e381SAndroid Build Coastguard Worker  * @param[in] aEnabled  True to enable logging to/via syslog.
81*4a64e381SAndroid Build Coastguard Worker  */
82*4a64e381SAndroid Build Coastguard Worker void otbrLogSyslogSetEnabled(bool aEnabled);
83*4a64e381SAndroid Build Coastguard Worker 
84*4a64e381SAndroid Build Coastguard Worker /**
85*4a64e381SAndroid Build Coastguard Worker  * This function initialize the logging service.
86*4a64e381SAndroid Build Coastguard Worker  *
87*4a64e381SAndroid Build Coastguard Worker  * @param[in] aProgramName    The name of this runnable program.
88*4a64e381SAndroid Build Coastguard Worker  * @param[in] aLevel          Log level of the logger.
89*4a64e381SAndroid Build Coastguard Worker  * @param[in] aPrintStderr    Whether to log to stderr.
90*4a64e381SAndroid Build Coastguard Worker  * @param[in] aSyslogDisable  Whether to disable logging to syslog.
91*4a64e381SAndroid Build Coastguard Worker  */
92*4a64e381SAndroid Build Coastguard Worker void otbrLogInit(const char *aProgramName, otbrLogLevel aLevel, bool aPrintStderr, bool aSyslogDisable);
93*4a64e381SAndroid Build Coastguard Worker 
94*4a64e381SAndroid Build Coastguard Worker /**
95*4a64e381SAndroid Build Coastguard Worker  * This function log at level @p aLevel.
96*4a64e381SAndroid Build Coastguard Worker  *
97*4a64e381SAndroid Build Coastguard Worker  * @param[in] aLevel   Log level of the logger.
98*4a64e381SAndroid Build Coastguard Worker  * @param[in] aLogTag  Log tag.
99*4a64e381SAndroid Build Coastguard Worker  * @param[in] aFormat  Format string as in printf.
100*4a64e381SAndroid Build Coastguard Worker  */
101*4a64e381SAndroid Build Coastguard Worker void otbrLog(otbrLogLevel aLevel, const char *aLogTag, const char *aFormat, ...);
102*4a64e381SAndroid Build Coastguard Worker 
103*4a64e381SAndroid Build Coastguard Worker /**
104*4a64e381SAndroid Build Coastguard Worker  * This function log at level @p aLevel.
105*4a64e381SAndroid Build Coastguard Worker  *
106*4a64e381SAndroid Build Coastguard Worker  * @param[in] aLevel    Log level of the logger.
107*4a64e381SAndroid Build Coastguard Worker  * @param[in] aFormat   Format string as in printf.
108*4a64e381SAndroid Build Coastguard Worker  * @param[in] aArgList  The variable-length arguments list.
109*4a64e381SAndroid Build Coastguard Worker  */
110*4a64e381SAndroid Build Coastguard Worker void otbrLogv(otbrLogLevel aLevel, const char *aFormat, va_list aArgList);
111*4a64e381SAndroid Build Coastguard Worker 
112*4a64e381SAndroid Build Coastguard Worker /**
113*4a64e381SAndroid Build Coastguard Worker  * This function writes logs without filtering with the log level.
114*4a64e381SAndroid Build Coastguard Worker  *
115*4a64e381SAndroid Build Coastguard Worker  * @param[in] aLevel    Log level of the logger.
116*4a64e381SAndroid Build Coastguard Worker  * @param[in] aFormat   Format string as in printf.
117*4a64e381SAndroid Build Coastguard Worker  * @param[in] aArgList  The variable-length arguments list.
118*4a64e381SAndroid Build Coastguard Worker  */
119*4a64e381SAndroid Build Coastguard Worker void otbrLogvNoFilter(otbrLogLevel aLevel, const char *aFormat, va_list aArgList);
120*4a64e381SAndroid Build Coastguard Worker 
121*4a64e381SAndroid Build Coastguard Worker /**
122*4a64e381SAndroid Build Coastguard Worker  * This function dump memory as hex string at level @p aLevel.
123*4a64e381SAndroid Build Coastguard Worker  *
124*4a64e381SAndroid Build Coastguard Worker  * @param[in] aLevel   Log level of the logger.
125*4a64e381SAndroid Build Coastguard Worker  * @param[in] aLogTag  Log tag.
126*4a64e381SAndroid Build Coastguard Worker  * @param[in] aPrefix  String before dumping memory.
127*4a64e381SAndroid Build Coastguard Worker  * @param[in] aMemory  The pointer to the memory to be dumped.
128*4a64e381SAndroid Build Coastguard Worker  * @param[in] aSize    The size of memory in bytes to be dumped.
129*4a64e381SAndroid Build Coastguard Worker  */
130*4a64e381SAndroid Build Coastguard Worker void otbrDump(otbrLogLevel aLevel, const char *aLogTag, const char *aPrefix, const void *aMemory, size_t aSize);
131*4a64e381SAndroid Build Coastguard Worker 
132*4a64e381SAndroid Build Coastguard Worker /**
133*4a64e381SAndroid Build Coastguard Worker  * This function converts error code to string.
134*4a64e381SAndroid Build Coastguard Worker  *
135*4a64e381SAndroid Build Coastguard Worker  * @param[in] aError  The error code.
136*4a64e381SAndroid Build Coastguard Worker  *
137*4a64e381SAndroid Build Coastguard Worker  * @returns The string information of error.
138*4a64e381SAndroid Build Coastguard Worker  */
139*4a64e381SAndroid Build Coastguard Worker const char *otbrErrorString(otbrError aError);
140*4a64e381SAndroid Build Coastguard Worker 
141*4a64e381SAndroid Build Coastguard Worker /**
142*4a64e381SAndroid Build Coastguard Worker  * This function deinitializes the logging service.
143*4a64e381SAndroid Build Coastguard Worker  */
144*4a64e381SAndroid Build Coastguard Worker void otbrLogDeinit(void);
145*4a64e381SAndroid Build Coastguard Worker 
146*4a64e381SAndroid Build Coastguard Worker /**
147*4a64e381SAndroid Build Coastguard Worker  * This macro log an action result according to @p aError.
148*4a64e381SAndroid Build Coastguard Worker  *
149*4a64e381SAndroid Build Coastguard Worker  * If @p aError is OTBR_ERROR_NONE, the log level will be OTBR_LOG_INFO,
150*4a64e381SAndroid Build Coastguard Worker  * otherwise OTBR_LOG_WARNING.
151*4a64e381SAndroid Build Coastguard Worker  *
152*4a64e381SAndroid Build Coastguard Worker  * @param[in] aError   The action result.
153*4a64e381SAndroid Build Coastguard Worker  * @param[in] aFormat  Format string as in printf.
154*4a64e381SAndroid Build Coastguard Worker  * @param[in] ...      Arguments for the format specification.
155*4a64e381SAndroid Build Coastguard Worker  */
156*4a64e381SAndroid Build Coastguard Worker #define otbrLogResult(aError, aFormat, ...)                                                               \
157*4a64e381SAndroid Build Coastguard Worker     do                                                                                                    \
158*4a64e381SAndroid Build Coastguard Worker     {                                                                                                     \
159*4a64e381SAndroid Build Coastguard Worker         otbrError _err = (aError);                                                                        \
160*4a64e381SAndroid Build Coastguard Worker         otbrLog(_err == OTBR_ERROR_NONE ? OTBR_LOG_INFO : OTBR_LOG_WARNING, OTBR_LOG_TAG, aFormat ": %s", \
161*4a64e381SAndroid Build Coastguard Worker                 ##__VA_ARGS__, otbrErrorString(_err));                                                    \
162*4a64e381SAndroid Build Coastguard Worker     } while (0)
163*4a64e381SAndroid Build Coastguard Worker 
164*4a64e381SAndroid Build Coastguard Worker /**
165*4a64e381SAndroid Build Coastguard Worker  * @def otbrLogEmerg
166*4a64e381SAndroid Build Coastguard Worker  *
167*4a64e381SAndroid Build Coastguard Worker  * Log at level emergency.
168*4a64e381SAndroid Build Coastguard Worker  *
169*4a64e381SAndroid Build Coastguard Worker  * @param[in] ...  Arguments for the format specification.
170*4a64e381SAndroid Build Coastguard Worker  */
171*4a64e381SAndroid Build Coastguard Worker 
172*4a64e381SAndroid Build Coastguard Worker /**
173*4a64e381SAndroid Build Coastguard Worker  * @def otbrLogAlert
174*4a64e381SAndroid Build Coastguard Worker  *
175*4a64e381SAndroid Build Coastguard Worker  * Log at level alert.
176*4a64e381SAndroid Build Coastguard Worker  *
177*4a64e381SAndroid Build Coastguard Worker  * @param[in] ...  Arguments for the format specification.
178*4a64e381SAndroid Build Coastguard Worker  */
179*4a64e381SAndroid Build Coastguard Worker 
180*4a64e381SAndroid Build Coastguard Worker /**
181*4a64e381SAndroid Build Coastguard Worker  * @def otbrLogCrit
182*4a64e381SAndroid Build Coastguard Worker  *
183*4a64e381SAndroid Build Coastguard Worker  * Log at level critical.
184*4a64e381SAndroid Build Coastguard Worker  *
185*4a64e381SAndroid Build Coastguard Worker  * @param[in] ...  Arguments for the format specification.
186*4a64e381SAndroid Build Coastguard Worker  */
187*4a64e381SAndroid Build Coastguard Worker 
188*4a64e381SAndroid Build Coastguard Worker /**
189*4a64e381SAndroid Build Coastguard Worker  * @def otbrLogErr
190*4a64e381SAndroid Build Coastguard Worker  *
191*4a64e381SAndroid Build Coastguard Worker  * Log at level error.
192*4a64e381SAndroid Build Coastguard Worker  *
193*4a64e381SAndroid Build Coastguard Worker  * @param[in] ...  Arguments for the format specification.
194*4a64e381SAndroid Build Coastguard Worker  */
195*4a64e381SAndroid Build Coastguard Worker 
196*4a64e381SAndroid Build Coastguard Worker /**
197*4a64e381SAndroid Build Coastguard Worker  * @def otbrLogWarning
198*4a64e381SAndroid Build Coastguard Worker  *
199*4a64e381SAndroid Build Coastguard Worker  * Log at level warning.
200*4a64e381SAndroid Build Coastguard Worker  *
201*4a64e381SAndroid Build Coastguard Worker  * @param[in] ...  Arguments for the format specification.
202*4a64e381SAndroid Build Coastguard Worker  */
203*4a64e381SAndroid Build Coastguard Worker 
204*4a64e381SAndroid Build Coastguard Worker /**
205*4a64e381SAndroid Build Coastguard Worker  * @def otbrLogNotice
206*4a64e381SAndroid Build Coastguard Worker  *
207*4a64e381SAndroid Build Coastguard Worker  * Log at level notice.
208*4a64e381SAndroid Build Coastguard Worker  *
209*4a64e381SAndroid Build Coastguard Worker  * @param[in] ...  Arguments for the format specification.
210*4a64e381SAndroid Build Coastguard Worker  */
211*4a64e381SAndroid Build Coastguard Worker 
212*4a64e381SAndroid Build Coastguard Worker /**
213*4a64e381SAndroid Build Coastguard Worker  * @def otbrLogInfo
214*4a64e381SAndroid Build Coastguard Worker  *
215*4a64e381SAndroid Build Coastguard Worker  * Log at level information.
216*4a64e381SAndroid Build Coastguard Worker  *
217*4a64e381SAndroid Build Coastguard Worker  * @param[in] ...  Arguments for the format specification.
218*4a64e381SAndroid Build Coastguard Worker  */
219*4a64e381SAndroid Build Coastguard Worker 
220*4a64e381SAndroid Build Coastguard Worker /**
221*4a64e381SAndroid Build Coastguard Worker  * @def otbrLogDebug
222*4a64e381SAndroid Build Coastguard Worker  *
223*4a64e381SAndroid Build Coastguard Worker  * Log at level debug.
224*4a64e381SAndroid Build Coastguard Worker  *
225*4a64e381SAndroid Build Coastguard Worker  * @param[in] ...  Arguments for the format specification.
226*4a64e381SAndroid Build Coastguard Worker  */
227*4a64e381SAndroid Build Coastguard Worker #define otbrLogEmerg(...) otbrLog(OTBR_LOG_EMERG, OTBR_LOG_TAG, __VA_ARGS__)
228*4a64e381SAndroid Build Coastguard Worker #define otbrLogAlert(...) otbrLog(OTBR_LOG_ALERT, OTBR_LOG_TAG, __VA_ARGS__)
229*4a64e381SAndroid Build Coastguard Worker #define otbrLogCrit(...) otbrLog(OTBR_LOG_CRIT, OTBR_LOG_TAG, __VA_ARGS__)
230*4a64e381SAndroid Build Coastguard Worker #define otbrLogErr(...) otbrLog(OTBR_LOG_ERR, OTBR_LOG_TAG, __VA_ARGS__)
231*4a64e381SAndroid Build Coastguard Worker #define otbrLogWarning(...) otbrLog(OTBR_LOG_WARNING, OTBR_LOG_TAG, __VA_ARGS__)
232*4a64e381SAndroid Build Coastguard Worker #define otbrLogNotice(...) otbrLog(OTBR_LOG_NOTICE, OTBR_LOG_TAG, __VA_ARGS__)
233*4a64e381SAndroid Build Coastguard Worker #define otbrLogInfo(...) otbrLog(OTBR_LOG_INFO, OTBR_LOG_TAG, __VA_ARGS__)
234*4a64e381SAndroid Build Coastguard Worker #define otbrLogDebug(...) otbrLog(OTBR_LOG_DEBUG, OTBR_LOG_TAG, __VA_ARGS__)
235*4a64e381SAndroid Build Coastguard Worker 
236*4a64e381SAndroid Build Coastguard Worker /**
237*4a64e381SAndroid Build Coastguard Worker  * Convert otbrLogLevel to otLogLevel.
238*4a64e381SAndroid Build Coastguard Worker  *
239*4a64e381SAndroid Build Coastguard Worker  * @param[in] aLevel  The otbrLogLevel to convert.
240*4a64e381SAndroid Build Coastguard Worker  *
241*4a64e381SAndroid Build Coastguard Worker  * @return the corresponding OT log level.
242*4a64e381SAndroid Build Coastguard Worker  */
243*4a64e381SAndroid Build Coastguard Worker otLogLevel ConvertToOtLogLevel(otbrLogLevel aLevel);
244*4a64e381SAndroid Build Coastguard Worker 
245*4a64e381SAndroid Build Coastguard Worker #endif // OTBR_COMMON_LOGGING_HPP_
246