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)); }
/** * 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); } }
/** * 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))); }
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); }
/** * 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); }
/** * 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); } }
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; }