Tracking Errors
Catch critical failures before your users report them. Use it for errors you need to know about instantly, not every 4xx.
When to use it
Use LogIt.Now() for failures where you want a tap on the shoulder right now:
- Checkout processing crashed
- Email delivery failed for a real user
- Stripe webhook handler threw an exception
- Background job failed after all retries
Info: LogIt.Now() is complementary to Sentry, not a replacement. Use Sentry for all errors, LogIt.Now() for the ones you need to know about instantly.
Basic error event
ts
try {
await processCheckout(cart);
} catch (err) {
await logit.now("errors", {
event: "Checkout failed",
description: err instanceof Error ? err.message : "Unknown error",
icon: "❌",
notify: true,
tags: { severity: "high", component: "checkout" },
metadata: {
userId: user.id,
cartId: cart.id,
errorMessage: err instanceof Error ? err.message : String(err),
},
});
throw err; // re-throw so your error boundary handles it too
}
Severity tagging
ts
// Use a consistent set of values across your codebase
type Severity = "low" | "medium" | "high" | "critical";
tags: { severity: "critical" satisfies Severity, component: "payments" }
With stack context
ts
await logit.now("errors", {
event: "Unhandled API error",
description: err.message,
icon: "🔥",
notify: true,
tags: { severity: "critical", route: req.path },
metadata: {
message: err.message,
stack: err.stack,
method: req.method,
url: req.url,
userId: req.user?.id,
},
});
Background jobs
ts
async function runWeeklyDigest() {
try {
await sendDigestEmails();
} catch (err) {
await logit.now("jobs", {
event: "Weekly digest job failed",
icon: "💥",
notify: true,
tags: { job: "weekly-digest", severity: "high" },
metadata: {
error: err instanceof Error ? err.message : String(err),
stack: err instanceof Error ? err.stack : undefined,
},
});
}
}