Пример #1
0
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));
}
Пример #2
0
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;
}
Пример #3
0
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, "&nbsp;");
	}
	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, "&nbsp;");
	}
	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, "&nbsp;");
	}
	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, "&nbsp;");
	}
	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;
}