Exemplo n.º 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));
}
Exemplo n.º 2
0
/**
 * log4g_logger_assert_:
 * @self: A #Log4gLogger object.
 * @assertion: The assertion to evaluate.
 * @function: The function where the event was logged.
 * @file: The file where the event was logged.
 * @line: The line in @file where the event was logged.
 * @format: A printf formatted message.
 * @...: Format parameters.
 *
 * Logs an error if the @assertion parameter is %FALSE.
 *
 * This function is intended for use by wrapper classes.
 *
 * See: log4g_assert(), log4g_logger_assert()
 *
 * Since: 0.1
 */
void
log4g_logger_assert_(Log4gLogger *self, gboolean assertion,
		const gchar *function, const gchar *file, const gchar *line,
		const gchar *format, ...)
{
	if (assertion) {
		return;
	}
	if (G_UNLIKELY(!self)) {
		return;
	}
	if (log4g_logger_repository_is_disabled(GET_PRIVATE(self)->repository,
				LOG4G_LEVEL_ERROR_INT)) {
		return;
	}
	Log4gLevel *effective = log4g_logger_get_effective_level(self);
	Log4gLevelClass *level = g_type_class_peek(LOG4G_TYPE_LEVEL);
	if (log4g_level_is_greater_or_equal(level->ERROR, effective)) {
		va_list ap;
		va_start(ap, format);
		log4g_logger_forced_log(self, level->ERROR, function,
				file, line, format, ap);
		va_end(ap);
	}
}
Exemplo n.º 3
0
/**
 * log4g_appender_is_as_severe_as:
 * @self: A #Log4gAppender object.
 * @level: A log level.
 *
 * Determine if a log level is below the appender's threshold.
 *
 * If there is no threshold set then the return value is always %TRUE.
 *
 * Returns: %TRUE if @level is above the level threshold of this appender,
 *          %FALSE otherwise.
 * Since: 0.1
 */
gboolean
log4g_appender_is_as_severe_as(Log4gAppender *self, Log4gLevel *level)
{
	g_return_val_if_fail(LOG4G_IS_APPENDER(self), FALSE);
	struct Private *priv = GET_PRIVATE(self);
	return ((priv->threshold == NULL)
			|| (log4g_level_is_greater_or_equal(level,
					priv->threshold)));
}
Exemplo n.º 4
0
void
test_002(G_GNUC_UNUSED gpointer *fixture, G_GNUC_UNUSED gconstpointer data)
{
	Log4gLevel *level = log4g_level_new(10, "FOO", 2);
	g_assert(level);
	g_assert_cmpint(log4g_level_to_int(level), ==, 10);
	g_assert_cmpstr(log4g_level_to_string(level), ==, "FOO");
	g_assert_cmpint(log4g_level_get_syslog_equivalent(level), ==, 2);
	g_assert(log4g_level_is_greater_or_equal(level, level));
	g_assert(log4g_level_equals(level, level));
	g_object_unref(level);
}
Exemplo n.º 5
0
/**
 * log4g_logger_is_error_enabled:
 * @self: A #Log4gLogger object.
 *
 * Check if a logger is enabled for the @LOG4G_LEVEL_ERROR level.
 *
 * Returns: %TRUE if @self is enabled for the @LOG4G_LEVEL_ERROR level, %FALSE
 *          otherwise.
 * Since: 0.1
 */
gboolean
log4g_logger_is_error_enabled(Log4gLogger *self)
{
	if (G_UNLIKELY(!self)) {
		return FALSE;
	}
	if (log4g_logger_repository_is_disabled(GET_PRIVATE(self)->repository,
				LOG4G_LEVEL_ERROR_INT)) {
		return FALSE;
	}
	Log4gLevel *effective = log4g_logger_get_effective_level(self);
	Log4gLevelClass *level = g_type_class_peek(LOG4G_TYPE_LEVEL);
	return log4g_level_is_greater_or_equal(level->ERROR, effective);
}
Exemplo n.º 6
0
/**
 * log4g_logger_log_:
 * @self: A Log4gLogger object.
 * @level: The level of the logging request.
 * @function: The function where the event was logged.
 * @file: The file where the event was logged.
 * @line: The line in @file where the event was logged.
 * @format: A printf formatted message.
 * @...: Format parameters.
 *
 * This is the most generic logging method.
 *
 * This function is intended for use by wrapper classes.
 *
 * See: log4g_log(), log4g_logger_log()
 *
 * Since: 0.1
 */
void
log4g_logger_log_(Log4gLogger *self, Log4gLevel *level, const gchar *function,
		const gchar *file, const gchar *line, const gchar *format, ...)
{
	if (G_UNLIKELY(!self)) {
		return;
	}
	if (log4g_logger_repository_is_disabled(GET_PRIVATE(self)->repository,
				log4g_level_to_int(level))) {
		return;
	}
	Log4gLevel *effective = log4g_logger_get_effective_level(self);
	if (log4g_level_is_greater_or_equal(level, effective)) {
		va_list ap;
		va_start(ap, format);
		log4g_logger_forced_log(self, level, function,
				file, line, format, ap);
		va_end(ap);
	}
}
Exemplo n.º 7
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;
}