1 /*
2 * Copyright (c) 2015, Xilinx Inc. and Contributors. All rights reserved.
3 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 */
6
7 #include <stdarg.h>
8 #include <stdio.h>
9
10 #include <metal/log.h>
11 #include <metal/sys.h>
12
metal_default_log_handler(enum metal_log_level level,const char * format,...)13 void metal_default_log_handler(enum metal_log_level level,
14 const char *format, ...)
15 {
16 #ifdef DEFAULT_LOGGER_ON
17 char msg[1024];
18 va_list args;
19 static const char * const level_strs[] = {
20 "metal: emergency: ",
21 "metal: alert: ",
22 "metal: critical: ",
23 "metal: error: ",
24 "metal: warning: ",
25 "metal: notice: ",
26 "metal: info: ",
27 "metal: debug: ",
28 };
29
30 va_start(args, format);
31 vsnprintf(msg, sizeof(msg), format, args);
32 va_end(args);
33
34 if (level <= METAL_LOG_EMERGENCY || level > METAL_LOG_DEBUG)
35 level = METAL_LOG_EMERGENCY;
36
37 fprintf(stderr, "%s%s", level_strs[level], msg);
38 #else
39 (void)level;
40 (void)format;
41 #endif
42 }
43
metal_set_log_handler(metal_log_handler handler)44 void metal_set_log_handler(metal_log_handler handler)
45 {
46 _metal.common.log_handler = handler;
47 }
48
metal_get_log_handler(void)49 metal_log_handler metal_get_log_handler(void)
50 {
51 return _metal.common.log_handler;
52 }
53
metal_set_log_level(enum metal_log_level level)54 void metal_set_log_level(enum metal_log_level level)
55 {
56 _metal.common.log_level = level;
57 }
58
metal_get_log_level(void)59 enum metal_log_level metal_get_log_level(void)
60 {
61 return _metal.common.log_level;
62 }
63