fix: use proper standard $pageview event for posthog, enable exception tracking

This commit is contained in:
2026-01-14 18:25:55 -06:00
parent 6d42e528b7
commit 59b2f15df7
6 changed files with 30 additions and 12 deletions
+5 -10
View File
@@ -1,15 +1,10 @@
import type { HandleClientError } from "@sveltejs/kit";
import { telemetry } from "$lib/telemetry";
import posthog from "posthog-js";
export const handleError: HandleClientError = ({ error, status, message }) => {
telemetry.trackError(
status >= 500 ? "runtime_error" : "network_error",
message,
{
stack: error instanceof Error ? error.stack : undefined,
context: { status },
},
);
export const handleError: HandleClientError = ({ error, status }) => {
if (status !== 404) {
posthog.captureException(error);
}
return {
message: status === 404 ? "Not Found" : "An error occurred",
+17
View File
@@ -1,13 +1,21 @@
import type { Handle, HandleServerError } from "@sveltejs/kit";
import { dev } from "$app/environment";
import { env } from "$env/dynamic/private";
import { initLogger } from "$lib/logger";
import { requestContext } from "$lib/server/context";
import { preCacheCollections } from "$lib/server/icons";
import { getLogger } from "@logtape/logtape";
import { minify } from "html-minifier-terser";
import { PostHog } from "posthog-node";
await initLogger();
// Initialize PostHog for server-side error tracking
const posthog =
env.POSTHOG_KEY && env.POSTHOG_HOST
? new PostHog(env.POSTHOG_KEY, { host: env.POSTHOG_HOST })
: null;
// Pre-cache icon collections before handling any requests
await preCacheCollections();
@@ -75,6 +83,15 @@ export const handleError: HandleServerError = async ({
error: error instanceof Error ? error.message : String(error),
});
if (posthog && status !== 404) {
const requestId = event.request.headers.get("x-request-id") ?? "unknown";
posthog.captureException(error, requestId, {
method: event.request.method,
path: event.url.pathname,
status,
});
}
return {
message: status === 404 ? "Not Found" : "Internal Error",
};
+2 -1
View File
@@ -83,10 +83,11 @@ class TelemetryClient {
/**
* Convenience method for tracking page views
* Uses PostHog's standard $pageview event for Web Analytics compatibility
*/
trackPageView(route: string): void {
this.track({
name: "page_view",
name: "$pageview",
properties: {
route,
referrer: browser ? document.referrer : undefined,
+2 -1
View File
@@ -5,9 +5,10 @@
/**
* Page view tracking event
* Uses PostHog's standard $pageview event name for Web Analytics compatibility
*/
export type PageViewEvent = {
name: "page_view";
name: "$pageview";
properties: {
route: string;
referrer?: string;