| | 185 | |
|---|
| | 186 | /* Default function for log messages. */ |
|---|
| | 187 | void midgard_error_default_log(const gchar *domain, GLogLevelFlags level, |
|---|
| | 188 | const gchar *msg, gpointer ptr) |
|---|
| | 189 | { |
|---|
| | 190 | gchar *level_ad = NULL; |
|---|
| | 191 | guint mlevel; |
|---|
| | 192 | GIOChannel *channel = NULL; |
|---|
| | 193 | MidgardConnection *mgd; |
|---|
| | 194 | MidgardTypeHolder *holder; |
|---|
| | 195 | |
|---|
| | 196 | if(ptr == NULL) { |
|---|
| | 197 | |
|---|
| | 198 | mlevel = G_LOG_LEVEL_WARNING; |
|---|
| | 199 | |
|---|
| | 200 | } else { |
|---|
| | 201 | |
|---|
| | 202 | if(MIDGARD_IS_CONNECTION((MidgardConnection *) ptr)) { |
|---|
| | 203 | |
|---|
| | 204 | mgd = MIDGARD_CONNECTION(ptr); |
|---|
| | 205 | mlevel = midgard_connection_get_loglevel(mgd); |
|---|
| | 206 | if(mgd->priv->config != NULL && mgd->priv->config->private != NULL) |
|---|
| | 207 | channel = mgd->priv->config->private->log_channel; |
|---|
| | 208 | |
|---|
| | 209 | } else { |
|---|
| | 210 | |
|---|
| | 211 | holder = (MidgardTypeHolder *) ptr; |
|---|
| | 212 | mlevel = holder->level; |
|---|
| | 213 | } |
|---|
| | 214 | } |
|---|
| | 215 | |
|---|
| | 216 | switch (level) { |
|---|
| | 217 | case G_LOG_FLAG_RECURSION: |
|---|
| | 218 | level_ad = "RECURSION"; |
|---|
| | 219 | break; |
|---|
| | 220 | |
|---|
| | 221 | case G_LOG_FLAG_FATAL: |
|---|
| | 222 | level_ad = "FATAL! "; |
|---|
| | 223 | break; |
|---|
| | 224 | |
|---|
| | 225 | case G_LOG_LEVEL_ERROR: |
|---|
| | 226 | level_ad = "ERROR"; |
|---|
| | 227 | break; |
|---|
| | 228 | |
|---|
| | 229 | case G_LOG_LEVEL_CRITICAL: |
|---|
| | 230 | level_ad = "CRITICAL "; |
|---|
| | 231 | break; |
|---|
| | 232 | |
|---|
| | 233 | case G_LOG_LEVEL_WARNING: |
|---|
| | 234 | level_ad = "WARNING"; |
|---|
| | 235 | break; |
|---|
| | 236 | |
|---|
| | 237 | case G_LOG_LEVEL_MESSAGE: |
|---|
| | 238 | level_ad = "m"; |
|---|
| | 239 | break; |
|---|
| | 240 | |
|---|
| | 241 | case G_LOG_LEVEL_INFO: |
|---|
| | 242 | level_ad = "info"; |
|---|
| | 243 | break; |
|---|
| | 244 | |
|---|
| | 245 | case G_LOG_LEVEL_DEBUG: |
|---|
| | 246 | level_ad = "debug"; |
|---|
| | 247 | break; |
|---|
| | 248 | |
|---|
| | 249 | default: |
|---|
| | 250 | level_ad = "midgard-unknown-log-level"; |
|---|
| | 251 | break; |
|---|
| | 252 | |
|---|
| | 253 | } |
|---|
| | 254 | |
|---|
| | 255 | if (mlevel >= level) { |
|---|
| | 256 | |
|---|
| | 257 | GString *logstr = g_string_new(""); |
|---|
| | 258 | g_string_append_printf(logstr, |
|---|
| | 259 | "%s (pid:%ld):(%s):%s\n", |
|---|
| | 260 | domain, |
|---|
| | 261 | (unsigned long)getpid(), |
|---|
| | 262 | level_ad, |
|---|
| | 263 | msg); |
|---|
| | 264 | |
|---|
| | 265 | gchar *tmpstr = g_string_free(logstr, FALSE); |
|---|
| | 266 | |
|---|
| | 267 | if(channel) { |
|---|
| | 268 | |
|---|
| | 269 | g_io_channel_write_chars(channel, |
|---|
| | 270 | (const gchar *)tmpstr, |
|---|
| | 271 | -1, NULL, NULL); |
|---|
| | 272 | g_io_channel_flush(channel, NULL); |
|---|
| | 273 | |
|---|
| | 274 | } else { |
|---|
| | 275 | |
|---|
| | 276 | fprintf(stderr, "%s", tmpstr); |
|---|
| | 277 | fflush(stderr); |
|---|
| | 278 | } |
|---|
| | 279 | |
|---|
| | 280 | g_free(tmpstr); |
|---|
| | 281 | } |
|---|
| | 282 | } |
|---|
| | 283 | |
|---|
| | 284 | /* Get GLogLevelFlags value from loglevel string */ |
|---|
| | 285 | gint midgard_error_parse_loglevel(const gchar *levelstring) |
|---|
| | 286 | { |
|---|
| | 287 | g_assert(levelstring != NULL); |
|---|
| | 288 | |
|---|
| | 289 | guint level = 0, mask = 0; |
|---|
| | 290 | guint len = strlen(levelstring); |
|---|
| | 291 | gchar *newlevel = g_ascii_strdown(levelstring, len); |
|---|
| | 292 | |
|---|
| | 293 | if(g_str_equal(newlevel, "error")) |
|---|
| | 294 | level = G_LOG_LEVEL_ERROR; |
|---|
| | 295 | if(g_str_equal(newlevel, "critical")) |
|---|
| | 296 | level = G_LOG_LEVEL_CRITICAL; |
|---|
| | 297 | if(g_str_equal(newlevel, "warn")) |
|---|
| | 298 | level = G_LOG_LEVEL_WARNING; |
|---|
| | 299 | if(g_str_equal(newlevel, "warning")) |
|---|
| | 300 | level = G_LOG_LEVEL_WARNING; |
|---|
| | 301 | if(g_str_equal(newlevel, "message")) |
|---|
| | 302 | level = G_LOG_LEVEL_MESSAGE; |
|---|
| | 303 | if(g_str_equal(newlevel, "info")) |
|---|
| | 304 | level = G_LOG_LEVEL_INFO; |
|---|
| | 305 | if(g_str_equal(newlevel, "debug")) |
|---|
| | 306 | level = G_LOG_LEVEL_DEBUG; |
|---|
| | 307 | |
|---|
| | 308 | g_free(newlevel); |
|---|
| | 309 | |
|---|
| | 310 | switch(level){ |
|---|
| | 311 | |
|---|
| | 312 | case G_LOG_LEVEL_ERROR: |
|---|
| | 313 | case G_LOG_LEVEL_CRITICAL: |
|---|
| | 314 | case G_LOG_LEVEL_WARNING: |
|---|
| | 315 | case G_LOG_LEVEL_MESSAGE: |
|---|
| | 316 | case G_LOG_LEVEL_INFO: |
|---|
| | 317 | case G_LOG_LEVEL_DEBUG: |
|---|
| | 318 | for (; level && level > G_LOG_FLAG_FATAL; level >>= 1) { |
|---|
| | 319 | mask |= level; |
|---|
| | 320 | } |
|---|
| | 321 | return mask; |
|---|
| | 322 | break; |
|---|
| | 323 | |
|---|
| | 324 | default: |
|---|
| | 325 | return -1; |
|---|
| | 326 | } |
|---|
| | 327 | |
|---|
| | 328 | return -1; |
|---|
| | 329 | } |
|---|