From 05cdbfae6ee7ef74c72bc339ff3cfe2e0648be5e Mon Sep 17 00:00:00 2001 From: tamassoltesz Date: Tue, 19 Aug 2025 11:58:56 +0200 Subject: [PATCH 1/2] feat: add hikari logs to otel --- CHANGELOG.md | 4 ++++ build.gradle | 2 +- .../postgresql/HikariLoggingAppender.java | 19 +++++++++++++++++++ .../supertokens/storage/postgresql/Start.java | 4 +++- 4 files changed, 27 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 24c6599b..0fe28704 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,10 @@ to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [Unreleased] +## [9.0.5] + +- Sends hikari logs to opentelemetry + ## [9.0.4] - Adds back `implementationDependencies.json` file, but now it is generated by the build process diff --git a/build.gradle b/build.gradle index b7209be3..10f4bc56 100644 --- a/build.gradle +++ b/build.gradle @@ -2,7 +2,7 @@ plugins { id 'java-library' } -version = "9.0.4" +version = "9.0.5" repositories { mavenCentral() diff --git a/src/main/java/io/supertokens/storage/postgresql/HikariLoggingAppender.java b/src/main/java/io/supertokens/storage/postgresql/HikariLoggingAppender.java index 55cb3bd5..36eb4f7c 100644 --- a/src/main/java/io/supertokens/storage/postgresql/HikariLoggingAppender.java +++ b/src/main/java/io/supertokens/storage/postgresql/HikariLoggingAppender.java @@ -25,9 +25,12 @@ import ch.qos.logback.core.filter.Filter; import ch.qos.logback.core.spi.FilterReply; import ch.qos.logback.core.status.Status; +import io.supertokens.pluginInterface.multitenancy.TenantIdentifier; +import io.supertokens.pluginInterface.opentelemetry.OtelProvider; import io.supertokens.storage.postgresql.output.Logging; import java.util.List; +import java.util.Map; public class HikariLoggingAppender implements Appender { @@ -37,6 +40,8 @@ public class HikariLoggingAppender implements Appender { private Context context; + private OtelProvider otelProvider; + HikariLoggingAppender(Start start) { super(); this.start = start; @@ -126,6 +131,10 @@ public String getName() { public void setName(String name) { } + public void setOtelProvider(OtelProvider otelProvider) { + this.otelProvider = otelProvider; + } + @Override public void doAppend(ILoggingEvent event) throws LogbackException { if (event.getLevel() == Level.ERROR) { @@ -135,7 +144,17 @@ public void doAppend(ILoggingEvent event) throws LogbackException { } else { Logging.debug(start, event.getFormattedMessage()); } + appendToOtel(event); + } + private void appendToOtel(ILoggingEvent event) { + if (otelProvider != null) { + String logMessage = event.getFormattedMessage(); + String logLevel = event.getLevel().toString(); + otelProvider.createLogEvent(TenantIdentifier.BASE_TENANT, logMessage, logLevel, + Map.of("loggerName", event.getLoggerName(), + "threadName", event.getThreadName())); + } } } diff --git a/src/main/java/io/supertokens/storage/postgresql/Start.java b/src/main/java/io/supertokens/storage/postgresql/Start.java index 3abf74d5..ce398340 100644 --- a/src/main/java/io/supertokens/storage/postgresql/Start.java +++ b/src/main/java/io/supertokens/storage/postgresql/Start.java @@ -68,6 +68,7 @@ import io.supertokens.pluginInterface.oauth.OAuthStorage; import io.supertokens.pluginInterface.oauth.exception.DuplicateOAuthLogoutChallengeException; import io.supertokens.pluginInterface.oauth.exception.OAuthClientNotFoundException; +import io.supertokens.pluginInterface.opentelemetry.OtelProvider; import io.supertokens.pluginInterface.passwordless.PasswordlessCode; import io.supertokens.pluginInterface.passwordless.PasswordlessDevice; import io.supertokens.pluginInterface.passwordless.PasswordlessImportUser; @@ -218,7 +219,7 @@ public void assertThatConfigFromSameUserPoolIsNotConflicting(JsonObject otherCon } @Override - public void initFileLogging(String infoLogPath, String errorLogPath) { + public void initFileLogging(String infoLogPath, String errorLogPath, OtelProvider otelProvider) { if (Logging.isAlreadyInitialised(this)) { return; } @@ -240,6 +241,7 @@ public void initFileLogging(String infoLogPath, String errorLogPath) { */ final Logger infoLog = (Logger) LoggerFactory.getLogger("com.zaxxer.hikari"); appender = new HikariLoggingAppender(this); + appender.setOtelProvider(otelProvider); if (infoLog.getAppender(HikariLoggingAppender.NAME) == null) { infoLog.setAdditive(false); infoLog.addAppender(appender); From ac4aae2cb04b049e0765ff4d20bc4db25c5415e0 Mon Sep 17 00:00:00 2001 From: tamassoltesz Date: Tue, 26 Aug 2025 09:45:32 +0200 Subject: [PATCH 2/2] chore: update build version and CHANGELOG --- CHANGELOG.md | 2 +- build.gradle | 2 +- pluginInterfaceSupported.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0fe28704..4b0a1874 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,7 +7,7 @@ to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [Unreleased] -## [9.0.5] +## [9.1.0] - Sends hikari logs to opentelemetry diff --git a/build.gradle b/build.gradle index 10f4bc56..e4f63f45 100644 --- a/build.gradle +++ b/build.gradle @@ -2,7 +2,7 @@ plugins { id 'java-library' } -version = "9.0.5" +version = "9.1.0" repositories { mavenCentral() diff --git a/pluginInterfaceSupported.json b/pluginInterfaceSupported.json index d4a59a78..6ca7c9ca 100644 --- a/pluginInterfaceSupported.json +++ b/pluginInterfaceSupported.json @@ -1,6 +1,6 @@ { "_comment": "contains a list of plugin interfaces branch names that this core supports", "versions": [ - "8.0" + "8.1" ] }