diff --git a/posthog/src/main/java/com/posthog/java/DefaultPostHogLogger.java b/posthog/src/main/java/com/posthog/java/DefaultPostHogLogger.java new file mode 100644 index 0000000..9b005b5 --- /dev/null +++ b/posthog/src/main/java/com/posthog/java/DefaultPostHogLogger.java @@ -0,0 +1,37 @@ +package com.posthog.java; + +import java.util.logging.Level; +import java.util.logging.Logger; + +public class DefaultPostHogLogger implements PostHogLogger { + private final Logger logger; + + public DefaultPostHogLogger() { + this.logger = Logger.getLogger(PostHog.class.getName()); + } + + @Override + public void debug(String message) { + logger.fine(message); + } + + @Override + public void info(String message) { + logger.info(message); + } + + @Override + public void warn(String message) { + logger.warning(message); + } + + @Override + public void error(String message) { + logger.severe(message); + } + + @Override + public void error(String message, Throwable throwable) { + logger.log(Level.SEVERE, message, throwable); + } +} diff --git a/posthog/src/main/java/com/posthog/java/HttpSender.java b/posthog/src/main/java/com/posthog/java/HttpSender.java index 084a2cd..87728bd 100644 --- a/posthog/src/main/java/com/posthog/java/HttpSender.java +++ b/posthog/src/main/java/com/posthog/java/HttpSender.java @@ -15,11 +15,12 @@ import okhttp3.Response; public class HttpSender implements Sender { - private String apiKey; - private String host; - private OkHttpClient client; - private int maxRetries; - private Duration initialRetryInterval; + private final String apiKey; + private final String host; + private final OkHttpClient client; + private final int maxRetries; + private final Duration initialRetryInterval; + private final PostHogLogger logger; public static class Builder { // required @@ -33,6 +34,7 @@ public static class Builder { // optional private Duration initialRetryInterval = Duration.ofMillis(500); + private PostHogLogger logger = new DefaultPostHogLogger(); public Builder(String apiKey) { this.apiKey = apiKey; @@ -53,6 +55,12 @@ public Builder initialRetryInterval(Duration initialRetryInterval) { return this; } + + public Builder logger(PostHogLogger logger) { + this.logger = logger; + return this; + } + public HttpSender build() { return new HttpSender(this); } @@ -63,6 +71,7 @@ private HttpSender(Builder builder) { this.host = builder.host; this.maxRetries = builder.maxRetries; this.initialRetryInterval = builder.initialRetryInterval; + this.logger = builder.logger; this.client = new OkHttpClient(); } @@ -102,7 +111,7 @@ public Boolean send(List events) { // TODO: verify if we need to retry on IOException, this may // already be handled by OkHTTP. See // https://square.github.io/okhttp/4.x/okhttp/okhttp3/-ok-http-client/-builder/retry-on-connection-failure/ - e.printStackTrace(); + logger.error("Error sending events to PostHog", e); } finally { // must always close an OkHTTP response // https://square.github.io/okhttp/4.x/okhttp/okhttp3/-call/execute/ @@ -125,7 +134,7 @@ public Boolean send(List events) { // On retries, make sure we log the response code or exception such // that people will know if something is up, ensuring we include the // retry count and how long we will wait before retrying. - System.out.println("Retrying sending events to PostHog after " + retries + " retries. Waiting for " + logger.debug("Retrying sending events to PostHog after " + retries + " retries. Waiting for " + retryInterval + "ms before retrying."); try { @@ -134,7 +143,7 @@ public Boolean send(List events) { // TODO this is a blocking sleep, we should use `Future`s here instead Thread.sleep(retryInterval); } catch (Exception e) { - e.printStackTrace(); + logger.error("Error sending events to PostHog", e); } } } @@ -145,7 +154,7 @@ private String getRequestBody(List events) { jsonObject.put("api_key", apiKey); jsonObject.put("batch", events); } catch (JSONException e) { - e.printStackTrace(); + logger.error("Error creating event JSON", e); } return jsonObject.toString(); } @@ -156,7 +165,7 @@ public JSONObject post(String route, String distinctId) { bodyJSON.put("api_key", apiKey); bodyJSON.put("distinct_id", distinctId); } catch (JSONException e) { - e.printStackTrace(); + logger.error("Error creating event JSON", e); } Response response = null; @@ -170,17 +179,15 @@ public JSONObject post(String route, String distinctId) { response = call.execute(); if (response.isSuccessful()) { - JSONObject responseJSON = new JSONObject(response.body().string()); - - return responseJSON; + return new JSONObject(response.body().string()); } if (response.code() >= 400 && response.code() < 500) { - System.err.println("Error calling API: " + response.body().string()); + logger.error("Error calling API: " + response.body().string()); return null; } } catch (IOException e) { - e.printStackTrace(); + logger.error("Error calling API", e); } finally { if (response != null) { response.close(); diff --git a/posthog/src/main/java/com/posthog/java/PostHog.java b/posthog/src/main/java/com/posthog/java/PostHog.java index 5b4191f..f8ec022 100644 --- a/posthog/src/main/java/com/posthog/java/PostHog.java +++ b/posthog/src/main/java/com/posthog/java/PostHog.java @@ -9,13 +9,15 @@ import org.json.JSONObject; public class PostHog { - private QueueManager queueManager; + private final QueueManager queueManager; private Thread queueManagerThread; - private Sender sender; + private final Sender sender; + private final PostHogLogger logger; private static abstract class BuilderBase { protected QueueManager queueManager; protected Sender sender; + protected PostHogLogger logger = new DefaultPostHogLogger(); } public static class Builder extends BuilderBase { @@ -34,8 +36,13 @@ public Builder host(String host) { return this; } + public Builder logger(PostHogLogger logger) { + this.logger = logger; + return this; + } + public PostHog build() { - this.sender = new HttpSender.Builder(apiKey).host(host).build(); + this.sender = new HttpSender.Builder(apiKey).host(host).logger(logger).build(); this.queueManager = new QueueManager.Builder(this.sender).build(); return new PostHog(this); } @@ -57,6 +64,7 @@ public PostHog build() { private PostHog(BuilderBase builder) { this.queueManager = builder.queueManager; this.sender = builder.sender; + this.logger = builder.logger; startQueueManager(); } @@ -65,8 +73,7 @@ public void shutdown() { try { queueManagerThread.join(); // wait for the current items in queue to be sent } catch (InterruptedException e) { - // TODO Auto-generated catch block - e.printStackTrace(); + logger.error("Error shutting down PostHog", e); } } @@ -196,7 +203,7 @@ private JSONObject getEventJson(String event, String distinctId, Map