24 #include <logging/console.h>
25 #include <logging/factory.h>
26 #include <logging/file.h>
27 #include <logging/multi.h>
28 #include <logging/syslog.h>
46 : Exception(
"Unknown logger type")
67 LoggerFactory::string_to_loglevel(
const char *log_level)
69 std::string ll = log_level;
71 if (ll ==
"info" || ll ==
"INFO") {
72 return Logger::LL_INFO;
73 }
else if (ll ==
"warn" || ll ==
"WARN") {
74 return Logger::LL_WARN;
75 }
else if (ll ==
"error" || ll ==
"ERROR") {
76 return Logger::LL_ERROR;
78 return Logger::LL_DEBUG;
98 LoggerFactory::instance(
const char *type,
const char *as)
102 if (strcmp(type,
"console") == 0) {
105 }
else if (strcmp(type,
"file") == 0) {
106 char * tmp = strdup(as);
108 char * r = strtok_r(tmp,
":", &saveptr);
109 const char *file_name;
110 r = strtok_r(tmp,
":", &saveptr);
112 file_name =
"unnamed.log";
116 l =
new FileLogger(file_name);
118 }
else if (strcmp(type,
"syslog") == 0) {
119 l =
new SyslogLogger(as);
123 throw UnknownLoggerTypeException();
142 LoggerFactory::multilogger_instance(
const char *as, Logger::LogLevel default_ll)
144 MultiLogger *m =
new MultiLogger();
145 m->set_loglevel(default_ll);
147 char * logger_string = strdup(as);
148 char * str = logger_string;
150 const char *type, *args, *level;
151 char * typeargs_saveptr, *level_saveptr, *type_str;
152 const char *logger_delim =
";";
153 const char *logger_typeargs_delim =
":";
154 const char *logger_level_delim =
"/";
155 while ((r = strtok_r(str, logger_delim, &saveptr)) != NULL) {
156 type = strtok_r(r, logger_typeargs_delim, &typeargs_saveptr);
157 args = strtok_r(NULL, logger_typeargs_delim, &typeargs_saveptr);
159 type_str = strdup(type);
161 type = strtok_r(type_str, logger_level_delim, &level_saveptr);
162 level = strtok_r(NULL, logger_level_delim, &level_saveptr);
172 Logger *l = instance(type, args);
175 Logger::LogLevel ll = string_to_loglevel(level);
178 }
catch (Exception &e) {
179 e.append(
"Could not open logger '%s:%s'", type, args);