1 /* Copyright (C) 2016-2017 Shengyu Zhang <i@silverrainz.me> 2 * 3 * This file is part of Srain. 4 * 5 * Srain is free software: you can redistribute it and/or modify 6 * it under the terms of the GNU General Public License as published by 7 * the Free Software Foundation, either version 3 of the License, or 8 * (at your option) any later version. 9 * 10 * This program is distributed in the hope that it will be useful, 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 * GNU General Public License for more details. 14 * 15 * You should have received a copy of the GNU General Public License 16 * along with this program. If not, see <http://www.gnu.org/licenses/>. 17 */ 18 19 #ifndef __LOG_H 20 #define __LOG_H 21 22 #include <glib.h> 23 24 #include "srain.h" 25 #include "ret.h" 26 27 typedef enum _SrnLogLevel SrnLogLevel; 28 typedef struct _SrnLoggerConfig SrnLoggerConfig; 29 typedef struct _SrnLogger SrnLogger; 30 31 enum _SrnLogLevel { 32 LOG_DEBUG, 33 LOG_INFO, 34 LOG_WARN, 35 LOG_ERROR, 36 LOG_MAX, 37 }; 38 39 struct _SrnLoggerConfig { 40 bool prompt_color; 41 bool prompt_file; 42 bool prompt_function; 43 bool prompt_line; 44 45 GList *debug_targets; 46 GList *info_targets; 47 GList *warn_targets; 48 GList *error_targets; 49 }; 50 51 /* Debug output */ 52 #define DBG_FR(...) \ 53 srn_logger_log(srn_logger_get_default(), LOG_DEBUG, TRUE, TRUE, \ 54 __FILE__, __FUNCTION__, __LINE__, __VA_ARGS__) 55 56 #define DBG_F(...) \ 57 srn_logger_log(srn_logger_get_default(), LOG_DEBUG, TRUE, FALSE, \ 58 __FILE__, __FUNCTION__, __LINE__, __VA_ARGS__) 59 60 #define DBG(...) \ 61 srn_logger_log(srn_logger_get_default(), LOG_DEBUG, FALSE, FALSE, \ 62 __FILE__, __FUNCTION__, __LINE__, __VA_ARGS__) 63 64 /* Info output */ 65 #define LOG_FR(...) \ 66 srn_logger_log(srn_logger_get_default(), LOG_INFO, TRUE, TRUE, \ 67 __FILE__, __FUNCTION__, __LINE__, __VA_ARGS__) 68 69 #define LOG_F(...) \ 70 srn_logger_log(srn_logger_get_default(), LOG_INFO, TRUE, FALSE, \ 71 __FILE__, __FUNCTION__, __LINE__, __VA_ARGS__) 72 73 #define LOG(...) \ 74 srn_logger_log(srn_logger_get_default(), LOG_INFO, FALSE, FALSE, \ 75 __FILE__, __FUNCTION__, __LINE__, __VA_ARGS__) 76 77 /* Warn output */ 78 #define WARN_FR(...) \ 79 srn_logger_log(srn_logger_get_default(), LOG_WARN, TRUE, TRUE, \ 80 __FILE__, __FUNCTION__, __LINE__, __VA_ARGS__) 81 82 #define WARN_F(...) \ 83 srn_logger_log(srn_logger_get_default(), LOG_WARN, TRUE, FALSE, \ 84 __FILE__, __FUNCTION__, __LINE__, __VA_ARGS__) 85 86 #define WARN(...) \ 87 srn_logger_log(srn_logger_get_default(), LOG_WARN, FALSE, FALSE \ 88 __FILE__, __FUNCTION__, __LINE__, __VA_ARGS__) 89 90 #define ERR_FR(...) \ 91 srn_logger_log(srn_logger_get_default(), LOG_ERROR, TRUE, TRUE, \ 92 __FILE__, __FUNCTION__, __LINE__, __VA_ARGS__) 93 94 #define ERR_F(...) \ 95 srn_logger_log(srn_logger_get_default(), LOG_ERROR, TRUE, FALSE, \ 96 __FILE__, __FUNCTION__, __LINE__, __VA_ARGS__) 97 98 SrnLogger *srn_logger_get_default(void); 99 void srn_logger_set_default(SrnLogger *logger); 100 101 SrnLogger *srn_logger_new(SrnLoggerConfig *cfg); 102 void srn_logger_free(SrnLogger *logger); 103 void srn_logger_set_config(SrnLogger *logger, SrnLoggerConfig *cfg); 104 SrnLoggerConfig *srn_logger_get_config(SrnLogger *logger); 105 void srn_logger_log(SrnLogger *logger, SrnLogLevel lv, bool print_prompt, 106 bool new_line, const char *file, const char *func, int line, 107 const char *fmt, ...); 108 109 SrnLoggerConfig *srn_logger_config_new(void); 110 void srn_logger_config_free(SrnLoggerConfig *cfg); 111 SrnRet srn_logger_config_check(SrnLoggerConfig *cfg); 112 113 #endif /* __LOG_H */ 114