Logger System 0.1.3
High-performance C++20 thread-safe logging system with asynchronous capabilities
Loading...
Searching...
No Matches
kcenon::logger::utils::time_utils Class Reference

Time utility functions for timestamp formatting. More...

#include <time_utils.h>

Collaboration diagram for kcenon::logger::utils::time_utils:
Collaboration graph

Static Public Member Functions

static std::string format_timestamp (const std::chrono::system_clock::time_point &tp)
 Format timestamp to human-readable format (YYYY-MM-DD HH:MM:SS.mmm)
 
static std::string format_iso8601 (const std::chrono::system_clock::time_point &tp)
 Format timestamp to ISO 8601 / RFC 3339 format with UTC timezone.
 
static std::string format_compact (const std::chrono::system_clock::time_point &tp)
 Format timestamp to compact format (YYYYMMDDHHMMSSmmm)
 
static std::string format_for_rotation (const std::chrono::system_clock::time_point &tp, bool include_hour=false)
 Format timestamp for file rotation (YYYYMMDD or YYYYMMDD_HH)
 
static std::chrono::system_clock::time_point now ()
 Get current system time as time_point.
 

Detailed Description

Time utility functions for timestamp formatting.

Provides thread-safe timestamp formatting functions in various formats commonly used in logging systems.

Definition at line 27 of file time_utils.h.

Member Function Documentation

◆ format_compact()

static std::string kcenon::logger::utils::time_utils::format_compact ( const std::chrono::system_clock::time_point & tp)
inlinestatic

Format timestamp to compact format (YYYYMMDDHHMMSSmmm)

Parameters
tpTime point to format
Returns
Compact timestamp string without separators

Output format: "20251103143015123"

Note
Useful for filename generation and sorting.
Thread-safe.

Definition at line 115 of file time_utils.h.

117 {
118 auto time_t = std::chrono::system_clock::to_time_t(tp);
119 std::tm tm_buf{};
120
121#ifdef _WIN32
122 localtime_s(&tm_buf, &time_t);
123#else
124 localtime_r(&time_t, &tm_buf);
125#endif
126
127 // Format compact timestamp
128 char buffer[32];
129 std::strftime(buffer, sizeof(buffer), "%Y%m%d%H%M%S", &tm_buf);
130
131 // Add milliseconds
132 auto ms = std::chrono::duration_cast<std::chrono::milliseconds>(
133 tp.time_since_epoch()
134 ) % 1000;
135
136 std::ostringstream oss;
137 oss << buffer
138 << std::setfill('0') << std::setw(3) << ms.count();
139
140 return oss.str();
141 }

◆ format_for_rotation()

static std::string kcenon::logger::utils::time_utils::format_for_rotation ( const std::chrono::system_clock::time_point & tp,
bool include_hour = false )
inlinestatic

Format timestamp for file rotation (YYYYMMDD or YYYYMMDD_HH)

Parameters
tpTime point to format
include_hourWhether to include hour in the format
Returns
Formatted timestamp suitable for file naming

Output formats:

  • Without hour: "20251103"
  • With hour: "20251103_14"
Note
Useful for rotating file writers.
Thread-safe.

Definition at line 156 of file time_utils.h.

159 {
160 auto time_t = std::chrono::system_clock::to_time_t(tp);
161 std::tm tm_buf{};
162
163#ifdef _WIN32
164 localtime_s(&tm_buf, &time_t);
165#else
166 localtime_r(&time_t, &tm_buf);
167#endif
168
169 char buffer[32];
170 if (include_hour) {
171 std::strftime(buffer, sizeof(buffer), "%Y%m%d_%H", &tm_buf);
172 } else {
173 std::strftime(buffer, sizeof(buffer), "%Y%m%d", &tm_buf);
174 }
175
176 return std::string(buffer);
177 }

◆ format_iso8601()

static std::string kcenon::logger::utils::time_utils::format_iso8601 ( const std::chrono::system_clock::time_point & tp)
inlinestatic

Format timestamp to ISO 8601 / RFC 3339 format with UTC timezone.

Parameters
tpTime point to format
Returns
ISO 8601 formatted timestamp string

Output format: "2025-11-03T14:30:15.123Z"

Note
Thread-safe. Always outputs in UTC (Z timezone indicator).
Compatible with JSON parsers and log aggregation systems (ELK, Splunk, etc.)
Examples
/home/runner/work/logger_system/logger_system/include/kcenon/logger/formatters/template_formatter.h.

Definition at line 76 of file time_utils.h.

78 {
79 auto time_t = std::chrono::system_clock::to_time_t(tp);
80 std::tm tm_buf{};
81
82#ifdef _WIN32
83 gmtime_s(&tm_buf, &time_t); // Windows thread-safe version (UTC)
84#else
85 gmtime_r(&time_t, &tm_buf); // POSIX thread-safe version (UTC)
86#endif
87
88 // Format base timestamp (ISO 8601)
89 char buffer[32];
90 std::strftime(buffer, sizeof(buffer), "%Y-%m-%dT%H:%M:%S", &tm_buf);
91
92 // Add milliseconds
93 auto ms = std::chrono::duration_cast<std::chrono::milliseconds>(
94 tp.time_since_epoch()
95 ) % 1000;
96
97 std::ostringstream oss;
98 oss << buffer << "."
99 << std::setfill('0') << std::setw(3) << ms.count()
100 << "Z"; // UTC timezone indicator
101
102 return oss.str();
103 }

Referenced by kcenon::logger::json_formatter::format(), kcenon::logger::logfmt_formatter::format(), and kcenon::logger::template_formatter::resolve_placeholder().

Here is the caller graph for this function:

◆ format_timestamp()

static std::string kcenon::logger::utils::time_utils::format_timestamp ( const std::chrono::system_clock::time_point & tp)
inlinestatic

Format timestamp to human-readable format (YYYY-MM-DD HH:MM:SS.mmm)

Parameters
tpTime point to format
Returns
Formatted timestamp string with millisecond precision

Output format: "2025-11-03 14:30:15.123"

Note
Thread-safe. Uses platform-specific thread-safe time conversion.
Examples
/home/runner/work/logger_system/logger_system/include/kcenon/logger/formatters/template_formatter.h.

Definition at line 38 of file time_utils.h.

40 {
41 auto time_t = std::chrono::system_clock::to_time_t(tp);
42 std::tm tm_buf{};
43
44#ifdef _WIN32
45 localtime_s(&tm_buf, &time_t); // Windows thread-safe version
46#else
47 localtime_r(&time_t, &tm_buf); // POSIX thread-safe version
48#endif
49
50 // Format base timestamp
51 char buffer[32];
52 std::strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", &tm_buf);
53
54 // Add milliseconds
55 auto ms = std::chrono::duration_cast<std::chrono::milliseconds>(
56 tp.time_since_epoch()
57 ) % 1000;
58
59 std::ostringstream oss;
60 oss << buffer << "."
61 << std::setfill('0') << std::setw(3) << ms.count();
62
63 return oss.str();
64 }

Referenced by kcenon::logger::timestamp_formatter::format(), and kcenon::logger::template_formatter::resolve_placeholder().

Here is the caller graph for this function:

◆ now()

static std::chrono::system_clock::time_point kcenon::logger::utils::time_utils::now ( )
inlinestatic

Get current system time as time_point.

Returns
Current time_point
Note
Convenience function for getting current time.

Definition at line 185 of file time_utils.h.

185 {
186 return std::chrono::system_clock::now();
187 }

The documentation for this class was generated from the following file: