aboutsummaryrefslogtreecommitdiff
path: root/src/zentelemetry/otlpencoder.cpp
diff options
context:
space:
mode:
authorStefan Boberg <[email protected]>2026-03-09 10:50:47 +0100
committerGitHub Enterprise <[email protected]>2026-03-09 10:50:47 +0100
commit19a117889c2db6b817af9458c04c04f324162e75 (patch)
treefbbd0d01c5bf40be90cec88e1d02c6a3c529a2f5 /src/zentelemetry/otlpencoder.cpp
parentzenstore bug-fixes from static analysis pass (#815) (diff)
downloadzen-19a117889c2db6b817af9458c04c04f324162e75.tar.xz
zen-19a117889c2db6b817af9458c04c04f324162e75.zip
Eliminate spdlog dependency (#773)
Removes the vendored spdlog library (~12,000 lines) and replaces it with a purpose-built logging system in zencore (~1,800 lines). The new implementation provides the same functionality with fewer abstractions, no shared_ptr overhead, and full control over the logging pipeline. ### What changed **New logging core in zencore/logging/:** - LogMessage, Formatter, Sink, Logger, Registry - core abstractions matching spdlog's model but simplified - AnsiColorStdoutSink - ANSI color console output (replaces spdlog stdout_color_sink) - MsvcSink - OutputDebugString on Windows (replaces spdlog msvc_sink) - AsyncSink - async logging via BlockingQueue worker thread (replaces spdlog async_logger) - NullSink, MessageOnlyFormatter - utility types - Thread-safe timestamp caching in formatters using RwLock **Moved to zenutil/logging/:** - FullFormatter - full log formatting with timestamp, logger name, level, source location, multiline alignment - JsonFormatter - structured JSON log output - RotatingFileSink - rotating file sink with atomic size tracking **API changes:** - Log levels are now an enum (LogLevel) instead of int, eliminating the zen::logging::level namespace - LoggerRef no longer wraps shared_ptr - it holds a raw pointer with the registry owning lifetime - Logger error handler is wired through Registry and propagated to all loggers on registration - Logger::Log() now populates ThreadId on every message **Cleanup:** - Deleted thirdparty/spdlog/ entirely (110+ files) - Deleted full_test_formatter (was ~80% duplicate of FullFormatter) - Renamed snake_case classes to PascalCase (full_formatter -> FullFormatter, json_formatter -> JsonFormatter, sentry_sink -> SentrySink) - Removed spdlog from xmake dependency graph ### Build / test impact - zencore no longer depends on spdlog - zenutil and zenvfs xmake.lua updated to drop spdlog dep - zentelemetry xmake.lua updated to drop spdlog dep - All existing tests pass, no test changes required beyond formatter class renames
Diffstat (limited to 'src/zentelemetry/otlpencoder.cpp')
-rw-r--r--src/zentelemetry/otlpencoder.cpp44
1 files changed, 22 insertions, 22 deletions
diff --git a/src/zentelemetry/otlpencoder.cpp b/src/zentelemetry/otlpencoder.cpp
index 677545066..5477c5381 100644
--- a/src/zentelemetry/otlpencoder.cpp
+++ b/src/zentelemetry/otlpencoder.cpp
@@ -3,9 +3,9 @@
#include "zentelemetry/otlpencoder.h"
#include <zenbase/zenbase.h>
+#include <zencore/logging/logmsg.h>
#include <zentelemetry/otlptrace.h>
-#include <spdlog/sinks/sink.h>
#include <zencore/testing.h>
#include <protozero/buffer_string.hpp>
@@ -29,49 +29,49 @@ OtlpEncoder::~OtlpEncoder()
}
static int
-MapSeverity(const spdlog::level::level_enum Level)
+MapSeverity(const logging::LogLevel Level)
{
switch (Level)
{
- case spdlog::level::critical:
+ case logging::Critical:
return otel::SEVERITY_NUMBER_FATAL;
- case spdlog::level::err:
+ case logging::Err:
return otel::SEVERITY_NUMBER_ERROR;
- case spdlog::level::warn:
+ case logging::Warn:
return otel::SEVERITY_NUMBER_WARN;
- case spdlog::level::info:
+ case logging::Info:
return otel::SEVERITY_NUMBER_INFO;
- case spdlog::level::debug:
+ case logging::Debug:
return otel::SEVERITY_NUMBER_DEBUG;
default:
- case spdlog::level::trace:
+ case logging::Trace:
return otel::SEVERITY_NUMBER_TRACE;
}
}
static const char*
-MapSeverityText(const spdlog::level::level_enum Level)
+MapSeverityText(const logging::LogLevel Level)
{
switch (Level)
{
- case spdlog::level::critical:
+ case logging::Critical:
return "fatal";
- case spdlog::level::err:
+ case logging::Err:
return "error";
- case spdlog::level::warn:
+ case logging::Warn:
return "warn";
- case spdlog::level::info:
+ case logging::Info:
return "info";
- case spdlog::level::debug:
+ case logging::Debug:
return "debug";
default:
- case spdlog::level::trace:
+ case logging::Trace:
return "trace";
}
}
std::string
-OtlpEncoder::FormatOtelProtobuf(const spdlog::details::log_msg& Msg) const
+OtlpEncoder::FormatOtelProtobuf(const logging::LogMessage& Msg) const
{
std::string Data;
@@ -98,7 +98,7 @@ OtlpEncoder::FormatOtelProtobuf(const spdlog::details::log_msg& Msg) const
protozero::pbf_builder<otel::InstrumentationScope> IsBuilder{SlBuilder,
otel::ScopeLogs::required_InstrumentationScope_scope};
- IsBuilder.add_string(otel::InstrumentationScope::string_name, Msg.logger_name.data(), Msg.logger_name.size());
+ IsBuilder.add_string(otel::InstrumentationScope::string_name, Msg.GetLoggerName().data(), Msg.GetLoggerName().size());
}
// LogRecord log_records
@@ -106,13 +106,13 @@ OtlpEncoder::FormatOtelProtobuf(const spdlog::details::log_msg& Msg) const
protozero::pbf_builder<otel::LogRecord> LrBuilder{SlBuilder, otel::ScopeLogs::required_repeated_LogRecord_log_records};
LrBuilder.add_fixed64(otel::LogRecord::required_fixed64_time_unix_nano,
- std::chrono::duration_cast<std::chrono::nanoseconds>(Msg.time.time_since_epoch()).count());
+ std::chrono::duration_cast<std::chrono::nanoseconds>(Msg.GetTime().time_since_epoch()).count());
- const int Severity = MapSeverity(Msg.level);
+ const int Severity = MapSeverity(Msg.GetLevel());
LrBuilder.add_enum(otel::LogRecord::optional_SeverityNumber_severity_number, Severity);
- LrBuilder.add_string(otel::LogRecord::optional_string_severity_text, MapSeverityText(Msg.level));
+ LrBuilder.add_string(otel::LogRecord::optional_string_severity_text, MapSeverityText(Msg.GetLevel()));
otel::TraceId TraceId;
const otel::SpanId SpanId = otel::Span::GetCurrentSpanId(TraceId);
@@ -127,7 +127,7 @@ OtlpEncoder::FormatOtelProtobuf(const spdlog::details::log_msg& Msg) const
{
protozero::pbf_builder<otel::AnyValue> BodyBuilder{LrBuilder, otel::LogRecord::optional_anyvalue_body};
- BodyBuilder.add_string(otel::AnyValue::string_string_value, Msg.payload.data(), Msg.payload.size());
+ BodyBuilder.add_string(otel::AnyValue::string_string_value, Msg.GetPayload().data(), Msg.GetPayload().size());
}
// attributes
@@ -139,7 +139,7 @@ OtlpEncoder::FormatOtelProtobuf(const spdlog::details::log_msg& Msg) const
{
protozero::pbf_builder<otel::AnyValue> AvBuilder{KvBuilder, otel::KeyValue::AnyValue_value};
- AvBuilder.add_int64(otel::AnyValue::int64_int_value, Msg.thread_id);
+ AvBuilder.add_int64(otel::AnyValue::int64_int_value, Msg.GetThreadId());
}
}
}