11import { AsyncLocalStorage } from 'async_hooks' ;
2- import { Request } from 'express' ;
2+ import { Request , Response , NextFunction } from 'express' ;
33
44// Severity levels as per Google Cloud Logging
55export enum LogSeverity {
@@ -17,7 +17,11 @@ export enum LogSeverity {
1717interface LogContext {
1818 trace ?: string ;
1919 spanId ?: string ;
20- [ key : string ] : any ;
20+ requestId ?: string ;
21+ userAgent ?: string ;
22+ method ?: string ;
23+ path ?: string ;
24+ [ key : string ] : string | undefined ;
2125}
2226
2327interface StructuredLogEntry {
@@ -26,7 +30,7 @@ interface StructuredLogEntry {
2630 timestamp : string ;
2731 'logging.googleapis.com/trace' ?: string ;
2832 'logging.googleapis.com/spanId' ?: string ;
29- [ key : string ] : any ;
33+ [ key : string ] : unknown ;
3034}
3135
3236class StructuredLogger {
@@ -73,7 +77,7 @@ class StructuredLogger {
7377 * Create Express middleware for request context
7478 */
7579 middleware ( ) {
76- return ( req : Request , res : any , next : any ) => {
80+ return ( req : Request , res : Response , next : NextFunction ) => {
7781 const context = this . extractTraceContext ( req ) ;
7882 this . runWithContext ( context , ( ) => {
7983 next ( ) ;
@@ -84,7 +88,7 @@ class StructuredLogger {
8488 /**
8589 * Log a structured message
8690 */
87- private log ( severity : LogSeverity , message : string , metadata ?: Record < string , any > ) {
91+ private log ( severity : LogSeverity , message : string , metadata ?: Record < string , unknown > ) {
8892 const context = this . asyncLocalStorage . getStore ( ) || { } ;
8993
9094 const entry : StructuredLogEntry = {
@@ -114,23 +118,23 @@ class StructuredLogger {
114118 }
115119
116120 // Convenience methods for different severity levels
117- debug ( message : string , metadata ?: Record < string , any > ) {
121+ debug ( message : string , metadata ?: Record < string , unknown > ) {
118122 this . log ( LogSeverity . DEBUG , message , metadata ) ;
119123 }
120124
121- info ( message : string , metadata ?: Record < string , any > ) {
125+ info ( message : string , metadata ?: Record < string , unknown > ) {
122126 this . log ( LogSeverity . INFO , message , metadata ) ;
123127 }
124128
125- notice ( message : string , metadata ?: Record < string , any > ) {
129+ notice ( message : string , metadata ?: Record < string , unknown > ) {
126130 this . log ( LogSeverity . NOTICE , message , metadata ) ;
127131 }
128132
129- warning ( message : string , metadata ?: Record < string , any > ) {
133+ warning ( message : string , metadata ?: Record < string , unknown > ) {
130134 this . log ( LogSeverity . WARNING , message , metadata ) ;
131135 }
132136
133- error ( message : string , error ?: Error , metadata ?: Record < string , any > ) {
137+ error ( message : string , error ?: Error , metadata ?: Record < string , unknown > ) {
134138 const errorMetadata = {
135139 ...metadata ,
136140 error : error ? {
@@ -142,15 +146,15 @@ class StructuredLogger {
142146 this . log ( LogSeverity . ERROR , message , errorMetadata ) ;
143147 }
144148
145- critical ( message : string , metadata ?: Record < string , any > ) {
149+ critical ( message : string , metadata ?: Record < string , unknown > ) {
146150 this . log ( LogSeverity . CRITICAL , message , metadata ) ;
147151 }
148152
149- alert ( message : string , metadata ?: Record < string , any > ) {
153+ alert ( message : string , metadata ?: Record < string , unknown > ) {
150154 this . log ( LogSeverity . ALERT , message , metadata ) ;
151155 }
152156
153- emergency ( message : string , metadata ?: Record < string , any > ) {
157+ emergency ( message : string , metadata ?: Record < string , unknown > ) {
154158 this . log ( LogSeverity . EMERGENCY , message , metadata ) ;
155159 }
156160
0 commit comments