diff options
| author | Stefan Boberg <[email protected]> | 2023-05-12 14:13:00 +0200 |
|---|---|---|
| committer | GitHub <[email protected]> | 2023-05-12 14:13:00 +0200 |
| commit | 9b74445504fb20401c174241b93c99bf765b43ce (patch) | |
| tree | 9e9ce2abe0f17c9ec327fb8fe3ecba4bea35f1c0 /src/zenserver/diag/logging.cpp | |
| parent | better logging/exception when reading file in IoBuffer::Materialize fails (#294) (diff) | |
| download | zen-9b74445504fb20401c174241b93c99bf765b43ce.tar.xz zen-9b74445504fb20401c174241b93c99bf765b43ce.zip | |
implemented structured cache logging (#296)
may be used as audit trail to help analyse potential cache pollution/corruption
* also added common header with timestamp to all known log targets
* made `Oid::operator bool` explicit to avoid logging/text format mishaps
* made `HttpClient::operator bool` explicit
Diffstat (limited to 'src/zenserver/diag/logging.cpp')
| -rw-r--r-- | src/zenserver/diag/logging.cpp | 39 |
1 files changed, 32 insertions, 7 deletions
diff --git a/src/zenserver/diag/logging.cpp b/src/zenserver/diag/logging.cpp index 24c7572f4..e6192c7c0 100644 --- a/src/zenserver/diag/logging.cpp +++ b/src/zenserver/diag/logging.cpp @@ -18,6 +18,8 @@ ZEN_THIRD_PARTY_INCLUDES_END #include <zencore/compactbinary.h> #include <zencore/filesystem.h> +#include <zencore/fmtutils.h> +#include <zencore/session.h> #include <zencore/string.h> #include <chrono> @@ -415,30 +417,45 @@ InitializeLogging(const ZenServerOptions& GlobalOptions) } #endif - // HTTP server request logging + std::vector<std::shared_ptr<spdlog::logger>> KnownLoggers{spdlog::default_logger()}; - std::filesystem::path HttpLogPath = GlobalOptions.DataDir / "logs" / "http.log"; + auto RegisterLogger = [&](std::shared_ptr<spdlog::logger> Logger) { + spdlog::register_logger(Logger); + KnownLoggers.push_back(Logger); + }; + // HTTP server request logging + std::filesystem::path HttpLogPath = GlobalOptions.DataDir / "logs" / "http.log"; // spdlog can't create directories that starts with `\\?\` so we make sure the folder exists before creating the logger instance zen::CreateDirectories(HttpLogPath.parent_path()); - auto HttpSink = std::make_shared<spdlog::sinks::rotating_file_sink_mt>(zen::PathToUtf8(HttpLogPath), /* max size */ 128 * 1024 * 1024, /* max files */ 16, /* rotate on open */ true); auto HttpLogger = std::make_shared<spdlog::logger>("http_requests", HttpSink); - spdlog::register_logger(HttpLogger); + RegisterLogger(HttpLogger); + + // Cache request logging + std::filesystem::path CacheLogPath = GlobalOptions.DataDir / "logs" / "z$.log"; + zen::CreateDirectories(CacheLogPath.parent_path()); + auto CacheSink = std::make_shared<spdlog::sinks::rotating_file_sink_mt>(zen::PathToUtf8(CacheLogPath), + /* max size */ 128 * 1024 * 1024, + /* max files */ 16, + /* rotate on open */ false); + + auto CacheLogger = std::make_shared<spdlog::logger>("z$", CacheSink); + RegisterLogger(CacheLogger); // Jupiter - only log upstream HTTP traffic to file auto JupiterLogger = std::make_shared<spdlog::logger>("jupiter", FileSink); - spdlog::register_logger(JupiterLogger); + RegisterLogger(JupiterLogger); // Zen - only log upstream HTTP traffic to file auto ZenClientLogger = std::make_shared<spdlog::logger>("zenclient", FileSink); - spdlog::register_logger(ZenClientLogger); + RegisterLogger(ZenClientLogger); // Configure all registered loggers according to settings @@ -455,7 +472,15 @@ InitializeLogging(const ZenServerOptions& GlobalOptions) { FileSink->set_pattern("[%C-%m-%d.%e %T] [%n] [%l] %v"); } - DefaultLogger.info("log starting at {}", zen::DateTime::Now().ToIso8601()); + + const std::string StartLogTime = zen::DateTime::Now().ToIso8601(); + const zen::Oid ServerSessionId = zen::GetSessionId(); + + for (auto& Logger : KnownLoggers) + { + Logger->info("log starting at {}", StartLogTime); + Logger->info("server session id: {}", ServerSessionId); + } } void |