void test_001(G_GNUC_UNUSED gpointer *fixture, G_GNUC_UNUSED gconstpointer data) { Log4gLevel *warn = log4g_level_WARN(); g_assert(warn); Log4gLevel *error = log4g_level_string_to_level("ERROR"); g_assert(error); Log4gLevel *level = log4g_level_int_to_level(log4g_level_to_int(warn)); g_assert(level); g_assert(log4g_level_equals(warn, level)); g_assert(!log4g_level_equals(warn, error)); g_assert(!log4g_level_is_greater_or_equal(warn, error)); g_assert(log4g_level_is_greater_or_equal(error, warn)); }
static gboolean do_configure(Log4gConfigurator *base, const char *uri, G_GNUC_UNUSED Log4gLoggerRepository *repository, GError **error) { struct Private *priv = GET_PRIVATE(base); gboolean status = TRUE; GString *string = g_string_sized_new(128); if (!string) { g_set_error(error, LOG4G_ERROR, LOG4G_ERROR_FAILURE, Q_("g_string_new() returned NULL")); return FALSE; } xmlSetGenericErrorFunc(string, error_handler); gint options = XML_PARSE_NOWARNING | XML_PARSE_NOERROR | XML_PARSE_NOBLANKS; if (g_getenv("LOG4G_PARSE_DTDVALID")) { options |= XML_PARSE_DTDVALID; } /* read XML file */ xmlDocPtr doc = xmlCtxtReadFile(priv->ctx, uri, NULL, options); if (!doc) { g_set_error(error, LOG4G_ERROR, LOG4G_ERROR_FAILURE, Q_("failed to parse configuration")); status = FALSE; goto exit; } /* check root element */ xmlNodePtr node = xmlDocGetRootElement(doc); if (!node) { g_set_error(error, LOG4G_ERROR, LOG4G_ERROR_FAILURE, Q_("invalid document: document is empty")); status = FALSE; goto exit; } if (xmlStrcmp(node->name, (const xmlChar *)"configuration")) { g_set_error(error, LOG4G_ERROR, LOG4G_ERROR_FAILURE, Q_("%s: invalid root element (expected " "log4g:configuration)"), node->name); status = FALSE; goto exit; } /* parse root attributes */ xmlChar *att = xmlGetProp(node, (const xmlChar *)"debug"); if (att) { if (!xmlStrcmp(att, (const xmlChar *)"true")) { log4g_set_internal_debugging(TRUE); } else if (!xmlStrcmp(att, (const xmlChar *)"false")) { log4g_set_internal_debugging(FALSE); } else if (!xmlStrcmp(att, (const xmlChar *)"null")) { log4g_log_warn(Q_("%s: ignoring `debug' attribute"), att); } else { log4g_log_error(Q_("%s: invalid value for attribute " "`debug'"), att); } xmlFree(att); } att = xmlGetProp(node, (const xmlChar *)"reset"); if (att) { if (!xmlStrcmp(att, (const xmlChar *)"true")) { log4g_log_manager_reset_configuration(); } xmlFree(att); } att = xmlGetProp(node, (const xmlChar *)"threshold"); if (att) { Log4gLevel *level; Log4gLoggerRepository *repository = log4g_log_manager_get_logger_repository(); if (!xmlStrcmp(att, (const xmlChar *)"all")) { level = log4g_level_ALL(); } else if (!xmlStrcmp(att, (const xmlChar *)"trace")) { level = log4g_level_TRACE(); } else if (!xmlStrcmp(att, (const xmlChar *)"debug")) { level = log4g_level_DEBUG(); } else if (!xmlStrcmp(att, (const xmlChar *)"info")) { level = log4g_level_INFO(); } else if (!xmlStrcmp(att, (const xmlChar *)"warn")) { level = log4g_level_WARN(); } else if (!xmlStrcmp(att, (const xmlChar *)"error")) { level = log4g_level_ERROR(); } else if (!xmlStrcmp(att, (const xmlChar *)"fatal")) { level = log4g_level_FATAL(); } else if (!xmlStrcmp(att, (const xmlChar *)"off")) { level = log4g_level_OFF(); } else if (!xmlStrcmp(att, (const xmlChar *)"null")) { level = NULL; } else { log4g_log_error(Q_("%s: invalid repository threshold"), att); level = NULL; } if (level) { log4g_logger_repository_set_threshold(repository, level); } xmlFree(att); } /* parse document */ node = node->xmlChildrenNode; while (node) { if (!xmlStrcmp(node->name, (const xmlChar *)"appender")) { Log4gAppender *appender = parse_appender(base, node); if (appender) { g_object_unref(appender); } } else if (!xmlStrcmp(node->name, (const xmlChar *)"logger")) { parse_logger(base, node); } else if (!xmlStrcmp(node->name, (const xmlChar *)"root")) { parse_root(base, node); } else if (!xmlStrcmp(node->name, (const xmlChar *)"object")) { parse_object(base, node); } else if (!xmlStrcmp(node->name, (const xmlChar *)"text")) { log4g_log_warn(Q_("invalid text element")); } else if (!xmlStrcmp(node->name, (const xmlChar *)"comment")) { /* do nothing */ } else { log4g_log_warn(Q_("%s: invalid element"), node->name); } node = node->next; } exit: if (string) { g_string_free(string, TRUE); } if (doc) { xmlFreeDoc(doc); } return status; }
static gchar * format(Log4gLayout *base, Log4gLoggingEvent *event) { struct Private *priv = GET_PRIVATE(base); Log4gLevel *level = log4g_logging_event_get_level(event); const GTimeVal *tv = log4g_logging_event_get_time_stamp(event); gchar *escaped; glong start = log4g_logging_event_get_start_time(); glong time = (tv->tv_sec * 1000) + (tv->tv_usec * 0.001); if (priv->string->len > MAX_CAPACITY) { g_string_free(priv->string, TRUE); priv->string = g_string_sized_new(BUF_SIZE); if (!priv->string) { return NULL; } } else { g_string_set_size(priv->string, 0); } g_string_append(priv->string, LOG4G_LAYOUT_LINE_SEP); g_string_append(priv->string, "<tr>"); g_string_append(priv->string, LOG4G_LAYOUT_LINE_SEP); /* time */ g_string_append(priv->string, "<td>"); g_string_append_printf(priv->string, "%ld", time - start); g_string_append(priv->string, "</td>"); g_string_append(priv->string, LOG4G_LAYOUT_LINE_SEP); /* thread */ escaped = g_strescape(log4g_logging_event_get_thread_name(event), NULL); if (escaped) { g_string_append_printf(priv->string, "<td title=\"%s\">", escaped); g_string_append(priv->string, escaped); g_free(escaped); } else { g_string_append(priv->string, "<td>"); g_string_append(priv->string, " "); } g_string_append(priv->string, "</td>"); g_string_append(priv->string, LOG4G_LAYOUT_LINE_SEP); /* level */ g_string_append(priv->string, "<td title=\"Level\">"); escaped = g_strescape(log4g_level_to_string(level), NULL); if (escaped) { if (log4g_level_equals(level, log4g_level_DEBUG())) { g_string_append(priv->string, "<font color=\"#339933\"><strong>"); g_string_append(priv->string, escaped); g_string_append(priv->string, "</strong></font>"); } else if (log4g_level_is_greater_or_equal(level, log4g_level_WARN())) { g_string_append(priv->string, "<font color=\"#993300\"><strong>"); g_string_append(priv->string, escaped); g_string_append(priv->string, "</strong></font>"); } else { g_string_append(priv->string, escaped); } g_free(escaped); } else { g_string_append(priv->string, " "); } g_string_append(priv->string, "</td>"); g_string_append(priv->string, LOG4G_LAYOUT_LINE_SEP); /* category */ escaped = g_strescape(log4g_logging_event_get_logger_name(event), NULL); if (escaped) { g_string_append_printf(priv->string, "<td title=\"%s\">", escaped); g_string_append(priv->string, escaped); g_free(escaped); } else { g_string_append(priv->string, "<td>"); g_string_append(priv->string, " "); } g_string_append(priv->string, "</td>"); g_string_append(priv->string, LOG4G_LAYOUT_LINE_SEP); if (priv->info) { /* file:line */ g_string_append(priv->string, "<td>"); escaped = g_strescape(log4g_logging_event_get_file_name(event), NULL); if (escaped) { g_string_append(priv->string, escaped); g_free(escaped); } g_string_append_c(priv->string, ':'); escaped = g_strescape(log4g_logging_event_get_line_number(event), NULL); if (escaped) { g_string_append(priv->string, escaped); g_free(escaped); } g_string_append(priv->string, "</td>"); g_string_append(priv->string, LOG4G_LAYOUT_LINE_SEP); } /* message */ g_string_append_printf(priv->string, "<td title=\"%s\">", Q_("Message")); escaped = g_strescape(log4g_logging_event_get_rendered_message(event), NULL); if (escaped) { g_string_append(priv->string, escaped); g_free(escaped); } else { g_string_append(priv->string, " "); } g_string_append(priv->string, "</td>"); g_string_append(priv->string, LOG4G_LAYOUT_LINE_SEP); g_string_append(priv->string, "</tr>"); g_string_append(priv->string, LOG4G_LAYOUT_LINE_SEP); /* NDC */ if (log4g_logging_event_get_ndc(event)) { escaped = g_strescape(log4g_logging_event_get_ndc(event), NULL); if (escaped) { g_string_append_printf(priv->string, "<tr><td bgcolor=\"#eeeeee\" " "style=\"font-size : xx-small;\" " "colspan=\"%d\" title=\"%s\">", (priv->info ? 6 : 5), Q_("Nested Diagnostic Context")); g_string_append(priv->string, "NDC: "); g_string_append(priv->string, escaped); g_string_append(priv->string, "</td></tr>"); g_string_append(priv->string, LOG4G_LAYOUT_LINE_SEP); g_free(escaped); } } return priv->string->str; }