ctdb-daemon: Add QueueBufferSize tunable
[samba.git] / ctdb / common / logging.c
1 /*
2    Logging utilities
3
4    Copyright (C) Amitay Isaacs  2015
5
6    This program is free software; you can redistribute it and/or modify
7    it under the terms of the GNU General Public License as published by
8    the Free Software Foundation; either version 3 of the License, or
9    (at your option) any later version.
10
11    This program is distributed in the hope that it will be useful,
12    but WITHOUT ANY WARRANTY; without even the implied warranty of
13    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14    GNU General Public License for more details.
15
16    You should have received a copy of the GNU General Public License
17    along with this program; if not, see <http://www.gnu.org/licenses/>.
18 */
19
20 #include <replace.h>
21 #include <system/locale.h>
22
23 #include "common/logging.h"
24
25 struct {
26         enum debug_level log_level;
27         const char *log_string;
28 } log_string_map[] = {
29         { DEBUG_ERR,     "ERROR" },
30         { DEBUG_WARNING, "WARNING" },
31         { DEBUG_NOTICE,  "NOTICE" },
32         { DEBUG_INFO,    "INFO" },
33         { DEBUG_DEBUG,   "DEBUG" },
34 };
35
36 bool debug_level_parse(const char *log_string, enum debug_level *log_level)
37 {
38         int i;
39
40         if (log_string == NULL) {
41                 return false;
42         }
43
44         if (isdigit(log_string[0])) {
45                 int level = atoi(log_string);
46
47                 if (level >= 0 && level < ARRAY_SIZE(log_string_map)) {
48                         *log_level = debug_level_from_int(level);
49                         return true;
50                 }
51                 return false;
52         }
53
54         for (i=0; i<ARRAY_SIZE(log_string_map); i++) {
55                 if (strncasecmp(log_string_map[i].log_string,
56                                 log_string, strlen(log_string)) == 0) {
57                         *log_level = log_string_map[i].log_level;
58                         return true;
59                 }
60         }
61
62         return false;
63 }
64
65 const char *debug_level_to_string(enum debug_level log_level)
66 {
67         int i;
68
69         for (i=0; ARRAY_SIZE(log_string_map); i++) {
70                 if (log_string_map[i].log_level == log_level) {
71                         return log_string_map[i].log_string;
72                 }
73         }
74         return "UNKNOWN";
75 }
76
77 enum debug_level debug_level_from_string(const char *log_string)
78 {
79         bool found;
80         enum debug_level log_level;
81
82         found = debug_level_parse(log_string, &log_level);
83         if (found) {
84                 return log_level;
85         }
86
87         /* Default debug level */
88         return DEBUG_ERR;
89 }
90
91 int debug_level_to_int(enum debug_level log_level)
92 {
93         return (int)log_level;
94 }
95
96 enum debug_level debug_level_from_int(int level)
97 {
98         enum debug_level log_level;
99
100         if (level >= 0 && level < ARRAY_SIZE(log_string_map)) {
101                 log_level = log_string_map[level].log_level;
102         } else {
103                 log_level = DEBUG_ERR;
104         }
105
106         return log_level;
107 }