xref: /aosp_15_r20/external/grpc-grpc/include/grpc/support/log.h (revision cc02d7e222339f7a4f6ba5f422e6413f4bd931f2)
1*cc02d7e2SAndroid Build Coastguard Worker /*
2*cc02d7e2SAndroid Build Coastguard Worker  *
3*cc02d7e2SAndroid Build Coastguard Worker  * Copyright 2015 gRPC authors.
4*cc02d7e2SAndroid Build Coastguard Worker  *
5*cc02d7e2SAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
6*cc02d7e2SAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
7*cc02d7e2SAndroid Build Coastguard Worker  * You may obtain a copy of the License at
8*cc02d7e2SAndroid Build Coastguard Worker  *
9*cc02d7e2SAndroid Build Coastguard Worker  *     http://www.apache.org/licenses/LICENSE-2.0
10*cc02d7e2SAndroid Build Coastguard Worker  *
11*cc02d7e2SAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
12*cc02d7e2SAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
13*cc02d7e2SAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14*cc02d7e2SAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
15*cc02d7e2SAndroid Build Coastguard Worker  * limitations under the License.
16*cc02d7e2SAndroid Build Coastguard Worker  *
17*cc02d7e2SAndroid Build Coastguard Worker  */
18*cc02d7e2SAndroid Build Coastguard Worker 
19*cc02d7e2SAndroid Build Coastguard Worker #ifndef GRPC_SUPPORT_LOG_H
20*cc02d7e2SAndroid Build Coastguard Worker #define GRPC_SUPPORT_LOG_H
21*cc02d7e2SAndroid Build Coastguard Worker 
22*cc02d7e2SAndroid Build Coastguard Worker #include <stdarg.h>
23*cc02d7e2SAndroid Build Coastguard Worker #include <stdlib.h> /* for abort() */
24*cc02d7e2SAndroid Build Coastguard Worker 
25*cc02d7e2SAndroid Build Coastguard Worker #include <grpc/support/port_platform.h>
26*cc02d7e2SAndroid Build Coastguard Worker 
27*cc02d7e2SAndroid Build Coastguard Worker #ifdef __cplusplus
28*cc02d7e2SAndroid Build Coastguard Worker extern "C" {
29*cc02d7e2SAndroid Build Coastguard Worker #endif
30*cc02d7e2SAndroid Build Coastguard Worker 
31*cc02d7e2SAndroid Build Coastguard Worker /** GPR log API.
32*cc02d7e2SAndroid Build Coastguard Worker 
33*cc02d7e2SAndroid Build Coastguard Worker    Usage (within grpc):
34*cc02d7e2SAndroid Build Coastguard Worker 
35*cc02d7e2SAndroid Build Coastguard Worker    int argument1 = 3;
36*cc02d7e2SAndroid Build Coastguard Worker    char* argument2 = "hello";
37*cc02d7e2SAndroid Build Coastguard Worker    gpr_log(GPR_DEBUG, "format string %d", argument1);
38*cc02d7e2SAndroid Build Coastguard Worker    gpr_log(GPR_INFO, "hello world");
39*cc02d7e2SAndroid Build Coastguard Worker    gpr_log(GPR_ERROR, "%d %s!!", argument1, argument2); */
40*cc02d7e2SAndroid Build Coastguard Worker 
41*cc02d7e2SAndroid Build Coastguard Worker /** The severity of a log message - use the #defines below when calling into
42*cc02d7e2SAndroid Build Coastguard Worker    gpr_log to additionally supply file and line data */
43*cc02d7e2SAndroid Build Coastguard Worker typedef enum gpr_log_severity {
44*cc02d7e2SAndroid Build Coastguard Worker   GPR_LOG_SEVERITY_DEBUG,
45*cc02d7e2SAndroid Build Coastguard Worker   GPR_LOG_SEVERITY_INFO,
46*cc02d7e2SAndroid Build Coastguard Worker   GPR_LOG_SEVERITY_ERROR
47*cc02d7e2SAndroid Build Coastguard Worker } gpr_log_severity;
48*cc02d7e2SAndroid Build Coastguard Worker 
49*cc02d7e2SAndroid Build Coastguard Worker /** Returns a string representation of the log severity */
50*cc02d7e2SAndroid Build Coastguard Worker GPRAPI const char* gpr_log_severity_string(gpr_log_severity severity);
51*cc02d7e2SAndroid Build Coastguard Worker 
52*cc02d7e2SAndroid Build Coastguard Worker /** Macros to build log contexts at various severity levels */
53*cc02d7e2SAndroid Build Coastguard Worker #define GPR_DEBUG __FILE__, __LINE__, GPR_LOG_SEVERITY_DEBUG
54*cc02d7e2SAndroid Build Coastguard Worker #define GPR_INFO __FILE__, __LINE__, GPR_LOG_SEVERITY_INFO
55*cc02d7e2SAndroid Build Coastguard Worker #define GPR_ERROR __FILE__, __LINE__, GPR_LOG_SEVERITY_ERROR
56*cc02d7e2SAndroid Build Coastguard Worker 
57*cc02d7e2SAndroid Build Coastguard Worker /** Log a message. It's advised to use GPR_xxx above to generate the context
58*cc02d7e2SAndroid Build Coastguard Worker  * for each message */
59*cc02d7e2SAndroid Build Coastguard Worker GPRAPI void gpr_log(const char* file, int line, gpr_log_severity severity,
60*cc02d7e2SAndroid Build Coastguard Worker                     const char* format, ...) GPR_PRINT_FORMAT_CHECK(4, 5);
61*cc02d7e2SAndroid Build Coastguard Worker 
62*cc02d7e2SAndroid Build Coastguard Worker GPRAPI int gpr_should_log(gpr_log_severity severity);
63*cc02d7e2SAndroid Build Coastguard Worker 
64*cc02d7e2SAndroid Build Coastguard Worker GPRAPI void gpr_log_message(const char* file, int line,
65*cc02d7e2SAndroid Build Coastguard Worker                             gpr_log_severity severity, const char* message);
66*cc02d7e2SAndroid Build Coastguard Worker 
67*cc02d7e2SAndroid Build Coastguard Worker /** Set global log verbosity */
68*cc02d7e2SAndroid Build Coastguard Worker GPRAPI void gpr_set_log_verbosity(gpr_log_severity min_severity_to_print);
69*cc02d7e2SAndroid Build Coastguard Worker 
70*cc02d7e2SAndroid Build Coastguard Worker GPRAPI void gpr_log_verbosity_init(void);
71*cc02d7e2SAndroid Build Coastguard Worker 
72*cc02d7e2SAndroid Build Coastguard Worker /** Log overrides: applications can use this API to intercept logging calls
73*cc02d7e2SAndroid Build Coastguard Worker    and use their own implementations */
74*cc02d7e2SAndroid Build Coastguard Worker 
75*cc02d7e2SAndroid Build Coastguard Worker struct gpr_log_func_args {
76*cc02d7e2SAndroid Build Coastguard Worker   const char* file;
77*cc02d7e2SAndroid Build Coastguard Worker   int line;
78*cc02d7e2SAndroid Build Coastguard Worker   gpr_log_severity severity;
79*cc02d7e2SAndroid Build Coastguard Worker   const char* message;
80*cc02d7e2SAndroid Build Coastguard Worker };
81*cc02d7e2SAndroid Build Coastguard Worker 
82*cc02d7e2SAndroid Build Coastguard Worker typedef struct gpr_log_func_args gpr_log_func_args;
83*cc02d7e2SAndroid Build Coastguard Worker 
84*cc02d7e2SAndroid Build Coastguard Worker typedef void (*gpr_log_func)(gpr_log_func_args* args);
85*cc02d7e2SAndroid Build Coastguard Worker GPRAPI void gpr_set_log_function(gpr_log_func func);
86*cc02d7e2SAndroid Build Coastguard Worker 
87*cc02d7e2SAndroid Build Coastguard Worker GPRAPI void gpr_assertion_failed(const char* filename, int line,
88*cc02d7e2SAndroid Build Coastguard Worker                                  const char* message) GPR_ATTRIBUTE_NORETURN;
89*cc02d7e2SAndroid Build Coastguard Worker 
90*cc02d7e2SAndroid Build Coastguard Worker /** abort() the process if x is zero, having written a line to the log.
91*cc02d7e2SAndroid Build Coastguard Worker 
92*cc02d7e2SAndroid Build Coastguard Worker    Intended for internal invariants.  If the error can be recovered from,
93*cc02d7e2SAndroid Build Coastguard Worker    without the possibility of corruption, or might best be reflected via
94*cc02d7e2SAndroid Build Coastguard Worker    an exception in a higher-level language, consider returning error code.  */
95*cc02d7e2SAndroid Build Coastguard Worker #define GPR_ASSERT(x)                               \
96*cc02d7e2SAndroid Build Coastguard Worker   do {                                              \
97*cc02d7e2SAndroid Build Coastguard Worker     if (GPR_UNLIKELY(!(x))) {                       \
98*cc02d7e2SAndroid Build Coastguard Worker       gpr_assertion_failed(__FILE__, __LINE__, #x); \
99*cc02d7e2SAndroid Build Coastguard Worker     }                                               \
100*cc02d7e2SAndroid Build Coastguard Worker   } while (0)
101*cc02d7e2SAndroid Build Coastguard Worker 
102*cc02d7e2SAndroid Build Coastguard Worker #ifndef NDEBUG
103*cc02d7e2SAndroid Build Coastguard Worker #define GPR_DEBUG_ASSERT(x) GPR_ASSERT(x)
104*cc02d7e2SAndroid Build Coastguard Worker #else
105*cc02d7e2SAndroid Build Coastguard Worker #define GPR_DEBUG_ASSERT(x)
106*cc02d7e2SAndroid Build Coastguard Worker #endif
107*cc02d7e2SAndroid Build Coastguard Worker 
108*cc02d7e2SAndroid Build Coastguard Worker #ifdef __cplusplus
109*cc02d7e2SAndroid Build Coastguard Worker }
110*cc02d7e2SAndroid Build Coastguard Worker #endif
111*cc02d7e2SAndroid Build Coastguard Worker 
112*cc02d7e2SAndroid Build Coastguard Worker #endif /* GRPC_SUPPORT_LOG_H */
113