feat(server/otel): integrate OpenTelemetry logging and emit logs with context

This commit is contained in:
RainbowBird
2026-03-28 03:59:09 +08:00
parent 04c8f499b9
commit 45bc5fef22
4 changed files with 49 additions and 3 deletions
+7 -2
View File
@@ -16,7 +16,7 @@ import type { HonoEnv } from './types/hono'
import process from 'node:process'
import { initLogger, LoggerFormat, LoggerLevel, useLogger } from '@guiiai/logg'
import { initLogger, LoggerFormat, LoggerLevel, setGlobalHookPostLog, useLogger } from '@guiiai/logg'
import { serve } from '@hono/node-server'
import { createNodeWebSocket } from '@hono/node-ws'
import { Hono } from 'hono'
@@ -29,7 +29,7 @@ import { createAuth } from './libs/auth'
import { createDrizzle, migrateDatabase } from './libs/db'
import { parsedEnv } from './libs/env'
import { initializeExternalDependency } from './libs/external-dependency'
import { initOtel } from './libs/otel'
import { emitOtelLog, initOtel } from './libs/otel'
import { createRedis } from './libs/redis'
import { sessionMiddleware } from './middlewares/auth'
import { otelMiddleware } from './middlewares/otel'
@@ -190,6 +190,11 @@ export async function createApp() {
injeca.setLogger(createLoggLogger(useLogger('injeca').useGlobalConfig()))
const logger = useLogger('app').useGlobalConfig()
// Forward logg output to OpenTelemetry log exporter
setGlobalHookPostLog((log) => {
emitOtelLog(log.level, log.context, log.message, log.fields as Record<string, string | number | boolean>)
})
const otel = injeca.provide('libs:otel', {
dependsOn: { env: parsedEnv, lifecycle },
build: ({ dependsOn }) => {