/** * log_stamp_format: * @stamp: Timestamp to format * @target: Target storage for formatted timestamp * @ts_format: Specifies basic timestamp format (TS_FMT_BSD, TS_FMT_ISO) * @zone_offset: Specifies custom zone offset if @tz_convert == TZ_CNV_CUSTOM * * Emits the formatted version of @stamp into @target as specified by * @ts_format and @tz_convert. **/ void log_stamp_append_format(LogStamp *stamp, GString *target, gint ts_format, glong zone_offset, gint frac_digits) { glong target_zone_offset = 0; struct tm *tm, tm_storage; char buf[8]; time_t t; if (zone_offset != -1) target_zone_offset = zone_offset; else target_zone_offset = stamp->zone_offset; t = stamp->time.tv_sec + target_zone_offset; if (!(tm = gmtime_r(&t, &tm_storage))) { /* this should never happen */ g_string_sprintf(target, "%d", (int) stamp->time.tv_sec); msg_error("Error formatting time stamp, gmtime() failed", evt_tag_int("stamp", (int) t), NULL); } else { switch (ts_format) { case TS_FMT_BSD: g_string_append_printf(target, "%s %2d %02d:%02d:%02d", month_names_abbrev[tm->tm_mon], tm->tm_mday, tm->tm_hour, tm->tm_min, tm->tm_sec); log_stamp_append_frac_digits(stamp, target, frac_digits); break; case TS_FMT_ISO: g_string_append_printf(target, "%d-%02d-%02dT%02d:%02d:%02d", tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday, tm->tm_hour, tm->tm_min, tm->tm_sec); log_stamp_append_frac_digits(stamp, target, frac_digits); format_zone_info(buf, sizeof(buf), target_zone_offset); g_string_append(target, buf); break; case TS_FMT_FULL: g_string_append_printf(target, "%d %s %2d %02d:%02d:%02d", tm->tm_year + 1900, month_names_abbrev[tm->tm_mon], tm->tm_mday, tm->tm_hour, tm->tm_min, tm->tm_sec); log_stamp_append_frac_digits(stamp, target, frac_digits); break; case TS_FMT_UNIX: g_string_append_printf(target, "%d", (int) stamp->time.tv_sec); log_stamp_append_frac_digits(stamp, target, frac_digits); break; default: g_assert_not_reached(); break; } } }
/** * log_stamp_format: * @stamp: Timestamp to format * @target: Target storage for formatted timestamp * @ts_format: Specifies basic timestamp format (TS_FMT_BSD, TS_FMT_ISO) * @zone_offset: Specifies custom zone offset if @tz_convert == TZ_CNV_CUSTOM * * Emits the formatted version of @stamp into @target as specified by * @ts_format and @tz_convert. **/ void log_stamp_append_format(const LogStamp *stamp, GString *target, gint ts_format, glong zone_offset, gint frac_digits) { glong target_zone_offset = 0; struct tm *tm, tm_storage; char buf[8]; time_t t; if (zone_offset != -1) target_zone_offset = zone_offset; else target_zone_offset = stamp->zone_offset; t = stamp->tv_sec + target_zone_offset; cached_gmtime(&t, &tm_storage); tm = &tm_storage; switch (ts_format) { case TS_FMT_BSD: g_string_append(target, month_names_abbrev[tm->tm_mon]); g_string_append_c(target, ' '); format_uint32_padded(target, 2, ' ', 10, tm->tm_mday); g_string_append_c(target, ' '); format_uint32_padded(target, 2, '0', 10, tm->tm_hour); g_string_append_c(target, ':'); format_uint32_padded(target, 2, '0', 10, tm->tm_min); g_string_append_c(target, ':'); format_uint32_padded(target, 2, '0', 10, tm->tm_sec); log_stamp_append_frac_digits(stamp, target, frac_digits); break; case TS_FMT_ISO: format_uint32_padded(target, 0, 0, 10, tm->tm_year + 1900); g_string_append_c(target, '-'); format_uint32_padded(target, 2, '0', 10, tm->tm_mon + 1); g_string_append_c(target, '-'); format_uint32_padded(target, 2, '0', 10, tm->tm_mday); g_string_append_c(target, 'T'); format_uint32_padded(target, 2, '0', 10, tm->tm_hour); g_string_append_c(target, ':'); format_uint32_padded(target, 2, '0', 10, tm->tm_min); g_string_append_c(target, ':'); format_uint32_padded(target, 2, '0', 10, tm->tm_sec); log_stamp_append_frac_digits(stamp, target, frac_digits); format_zone_info(buf, sizeof(buf), target_zone_offset); g_string_append(target, buf); break; case TS_FMT_FULL: format_uint32_padded(target, 0, 0, 10, tm->tm_year + 1900); g_string_append_c(target, ' '); g_string_append(target, month_names_abbrev[tm->tm_mon]); g_string_append_c(target, ' '); format_uint32_padded(target, 2, ' ', 10, tm->tm_mday); g_string_append_c(target, ' '); format_uint32_padded(target, 2, '0', 10, tm->tm_hour); g_string_append_c(target, ':'); format_uint32_padded(target, 2, '0', 10, tm->tm_min); g_string_append_c(target, ':'); format_uint32_padded(target, 2, '0', 10, tm->tm_sec); log_stamp_append_frac_digits(stamp, target, frac_digits); break; case TS_FMT_UNIX: format_uint32_padded(target, 0, 0, 10, (int) stamp->tv_sec); log_stamp_append_frac_digits(stamp, target, frac_digits); break; default: g_assert_not_reached(); break; } }