Spaces:
Sleeping
Sleeping
| import { auth } from '@/auth'; | |
| import { Session } from 'next-auth'; | |
| import { pino, Logger as LokiLogger } from 'pino'; | |
| import pinoLoki from 'pino-loki'; | |
| let loggerInstance: Logger; | |
| class Logger { | |
| private lokiLogger!: LokiLogger; | |
| constructor() { | |
| if (loggerInstance) { | |
| return loggerInstance; | |
| } | |
| this.lokiLogger = process.env.LND_TIER ? pino() : pino( | |
| { level: 'info' }, | |
| pinoLoki({ | |
| batching: false, | |
| // These labels will be added to every log | |
| labels: { | |
| app: 'grafanacloud-landingai-logs', | |
| namespace: 'vision-agent', | |
| }, | |
| // Credentials for our Loki instance | |
| host: 'https://logs-prod3.grafana.net', | |
| basicAuth: { | |
| username: process.env.LOKI_AUTH_USER_ID!, | |
| password: process.env.LOKI_AUTH_USER_PASSWORD!, | |
| }, | |
| }), | |
| ); | |
| this.lokiLogger.debug('test'); | |
| loggerInstance = this; | |
| return loggerInstance; | |
| } | |
| private createLogMessage( | |
| message: Object | string, | |
| session: Session | null, | |
| request?: Request, | |
| logDescription?: string, | |
| ) { | |
| const body = { | |
| type: logDescription || '__DEFAULT', | |
| context: { | |
| ...(request | |
| ? { | |
| method: request?.method, | |
| url: request.url, | |
| } | |
| : {}), | |
| sessionUserId: session?.user.id, | |
| sessionUserName: session?.user.name, | |
| sessionUserEmail: session?.user.email, | |
| }, | |
| message: message, | |
| }; | |
| return body; | |
| } | |
| info( | |
| session: Session | null, | |
| message: string | Object, | |
| request?: Request, | |
| logDescription?: string, | |
| ) { | |
| this.lokiLogger.info( | |
| this.createLogMessage(message, session, request, logDescription), | |
| ); | |
| } | |
| warn( | |
| session: Session | null, | |
| message: string | Object, | |
| request?: Request, | |
| logDescription?: string, | |
| ) { | |
| this.lokiLogger.warn( | |
| this.createLogMessage(message, session, request, logDescription), | |
| ); | |
| } | |
| debug( | |
| session: Session | null, | |
| message: string | Object, | |
| request?: Request, | |
| logDescription?: string, | |
| ) { | |
| this.lokiLogger.debug( | |
| this.createLogMessage(message, session, request, logDescription), | |
| ); | |
| } | |
| error( | |
| session: Session | null, | |
| message: string | Object, | |
| request?: Request, | |
| logDescription?: string, | |
| ) { | |
| this.lokiLogger.error( | |
| this.createLogMessage( | |
| message, | |
| session, | |
| request, | |
| logDescription ?? '__ERROR', | |
| ), | |
| ); | |
| } | |
| } | |
| export const withLogging = ( | |
| handler: ( | |
| session: Session | null, | |
| json: any, | |
| request: Request, | |
| ) => Promise<Response>, | |
| ) => { | |
| return async (req: Request) => { | |
| const session = await auth(); | |
| const json = await req.json(); | |
| logger.info( | |
| session, | |
| { | |
| params: json, | |
| }, | |
| req, | |
| '_API_REQUEST', | |
| ); | |
| return handler(session, json, req); | |
| }; | |
| }; | |
| export const logger = new Logger(); | |