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