feat: api logging by pino (#1865)

experiemental
This commit is contained in:
David Nguyen
2025-06-27 21:44:51 +10:00
committed by GitHub
parent 21dc4eee62
commit e07a497b69
10 changed files with 389 additions and 116 deletions
+8 -1
View File
@@ -1,14 +1,17 @@
import type { Session } from '@prisma/client';
import type { Context } from 'hono';
import type { Logger } from 'pino';
import { z } from 'zod';
import type { SessionUser } from '@documenso/auth/server/lib/session/session';
import { getOptionalSession } from '@documenso/auth/server/lib/utils/get-session';
import type { ApiRequestMetadata } from '@documenso/lib/universal/extract-request-metadata';
import { extractRequestMetadata } from '@documenso/lib/universal/extract-request-metadata';
// This is a bit nasty. Todo: Extract
import type { HonoEnv } from '@documenso/remix/server/router';
type CreateTrpcContextOptions = {
c: Context;
c: Context<HonoEnv>;
requestSource: 'app' | 'apiV1' | 'apiV2';
};
@@ -19,6 +22,7 @@ export const createTrpcContext = async ({
const { session, user } = await getOptionalSession(c);
const req = c.req.raw;
const logger = c.get('logger');
const metadata: ApiRequestMetadata = {
requestMetadata: extractRequestMetadata(req),
@@ -36,6 +40,7 @@ export const createTrpcContext = async ({
if (!session || !user) {
return {
logger,
session: null,
user: null,
teamId,
@@ -45,6 +50,7 @@ export const createTrpcContext = async ({
}
return {
logger,
session,
user,
teamId,
@@ -66,4 +72,5 @@ export type TrpcContext = (
teamId: number | undefined;
req: Request;
metadata: ApiRequestMetadata;
logger: Logger;
};
+17 -1
View File
@@ -65,7 +65,13 @@ const t = initTRPC
/**
* Middlewares
*/
export const authenticatedMiddleware = t.middleware(async ({ ctx, next }) => {
export const authenticatedMiddleware = t.middleware(async ({ ctx, next, path }) => {
const logger = ctx.logger.child({
path,
auth: ctx.metadata.auth,
source: ctx.metadata.source,
});
const authorizationHeader = ctx.req.headers.get('authorization');
// Taken from `authenticatedMiddleware` in `@documenso/api/v1/middleware/authenticated.ts`.
@@ -79,6 +85,11 @@ export const authenticatedMiddleware = t.middleware(async ({ ctx, next }) => {
const apiToken = await getApiTokenByToken({ token });
logger.info({
userId: apiToken.user.id,
apiTokenId: apiToken.id,
});
return await next({
ctx: {
...ctx,
@@ -111,6 +122,11 @@ export const authenticatedMiddleware = t.middleware(async ({ ctx, next }) => {
});
}
logger.info({
userId: ctx.user.id,
apiTokenId: null,
});
return await next({
ctx: {
...ctx,
+1 -1
View File
@@ -1,7 +1,7 @@
import type { ErrorHandlerOptions } from '@trpc/server/unstable-core-do-not-import';
import { AppError, AppErrorCode } from '@documenso/lib/errors/app-error';
import { buildLogger } from '@documenso/lib/utils/logger';
import { buildLogger } from '@documenso/lib/utils/logger-legacy';
const logger = buildLogger();