diff options
| author | Stefan Boberg <[email protected]> | 2022-03-07 20:59:41 +0100 |
|---|---|---|
| committer | Stefan Boberg <[email protected]> | 2022-03-07 20:59:41 +0100 |
| commit | 14b0b7ffa85efe1e66a5e30a979fefee67876e68 (patch) | |
| tree | 06a571bfc85356b33d3897655b1deb7f5d997275 | |
| parent | Fixed "taking address of constant" compile error (diff) | |
| download | zen-14b0b7ffa85efe1e66a5e30a979fefee67876e68.tar.xz zen-14b0b7ffa85efe1e66a5e30a979fefee67876e68.zip | |
fixed sentry initialization, added sentry logging support
the initialization code was refactored at one point to add a NoSentry option, but unfortunately this had a bug which caused sentry to immediately get cleaned up before leaving the if scope
| -rw-r--r-- | zenserver/zenserver.cpp | 64 |
1 files changed, 60 insertions, 4 deletions
diff --git a/zenserver/zenserver.cpp b/zenserver/zenserver.cpp index 78a62e202..243a2bfc1 100644 --- a/zenserver/zenserver.cpp +++ b/zenserver/zenserver.cpp @@ -840,19 +840,75 @@ ZenEntryPoint::ZenEntryPoint(ZenServerOptions& ServerOptions) : m_ServerOptions( { } +#if ZEN_USE_SENTRY +void +SentryLogFunction(sentry_level_t Level, const char* Message, va_list Args, [[maybe_unused]] void* Userdata) +{ + char LogMessageBuffer[160]; + std::string LogMessage; + const char* MessagePtr = LogMessageBuffer; + + int n = vsnprintf(LogMessageBuffer, sizeof LogMessageBuffer, Message, Args); + + if (n >= sizeof LogMessageBuffer) + { + LogMessage.resize(n + 1); + + n = vsnprintf(LogMessage.data(), LogMessage.size(), Message, Args); + + MessagePtr = LogMessage.c_str(); + } + + switch (Level) + { + case SENTRY_LEVEL_DEBUG: + ConsoleLog().debug("sentry: {}", MessagePtr); + break; + + case SENTRY_LEVEL_INFO: + ConsoleLog().info("sentry: {}", MessagePtr); + break; + + case SENTRY_LEVEL_WARNING: + ConsoleLog().warn("sentry: {}", MessagePtr); + break; + + case SENTRY_LEVEL_ERROR: + ConsoleLog().error("sentry: {}", MessagePtr); + break; + + case SENTRY_LEVEL_FATAL: + ConsoleLog().critical("sentry: {}", MessagePtr); + break; + } +} +#endif + int ZenEntryPoint::Run() { #if ZEN_USE_SENTRY + std::string SentryDatabasePath = PathToUtf8(m_ServerOptions.DataDir / ".sentry-native"); + if (m_ServerOptions.NoSentry == false) { sentry_options_t* SentryOptions = sentry_options_new(); sentry_options_set_dsn(SentryOptions, "https://[email protected]/5919284"); - sentry_options_set_database_path(SentryOptions, PathToUtf8(m_ServerOptions.DataDir / ".sentry-native").c_str()); - sentry_init(SentryOptions); - - auto _ = zen::MakeGuard([] { sentry_close(); }); + sentry_options_set_database_path(SentryOptions, SentryDatabasePath.c_str()); + sentry_options_set_logger(SentryOptions, SentryLogFunction, this); + //sentry_options_set_debug(SentryOptions, 1); + + if (int ErrorCode = sentry_init(SentryOptions); ErrorCode == 0) + { + printf("sentry initialized"); + } + else + { + printf("sentry_init returned failure!"); + } } + + auto _ = zen::MakeGuard([] { sentry_close(); }); #endif auto& ServerOptions = m_ServerOptions; |