1+ import { createInstance } from "@dynatrace/oneagent-sdk" ;
12import { Request , RequestHandler , Response } from "express" ;
23import pino , { Logger } from "pino" ;
34import pinoHttp , { ReqId } from "pino-http" ;
@@ -69,17 +70,26 @@ export const generateRequestId = (req: Request, res: Response): ReqId => {
6970 return newId ;
7071} ;
7172
72- const addRequestContext = (
73- req : Request ,
74- res : Response ,
75- val : object ,
76- ) : object => ( {
77- ...val ,
78- requestId : req . id ,
79- ipvSessionId : req . session ?. ipvSessionId ,
80- sessionId : req . session ?. id ,
81- context : req . session ?. context ?? undefined ,
82- } ) ;
73+ const getDynatraceContext = ( ) : object | undefined => {
74+ const dynatraceApi = createInstance ( ) ;
75+ const contextInfo = dynatraceApi . getTraceContextInfo ( ) ;
76+ if ( contextInfo ?. isValid ) {
77+ return {
78+ "dt.trace_id" : contextInfo . traceid ,
79+ "dt.span_id" : contextInfo . spanid ,
80+ } ;
81+ }
82+ } ;
83+
84+ export const getLogRequestContext = ( req : Request ) : object => {
85+ return {
86+ requestId : req . id ,
87+ ipvSessionId : req . session ?. ipvSessionId ,
88+ sessionId : req . session ?. id ,
89+ context : req . session ?. context ?? undefined ,
90+ ...getDynatraceContext ( ) ,
91+ } ;
92+ } ;
8393
8494export const loggerMiddleware : RequestHandler = pinoHttp ( {
8595 // Reuse an existing logger instance
@@ -90,20 +100,18 @@ export const loggerMiddleware: RequestHandler = pinoHttp({
90100 wrapSerializers : false ,
91101 // Define a custom receive message
92102 customReceivedMessage : ( req ) => `REQUEST RECEIVED: ${ req . method } ` ,
93- customReceivedObject : addRequestContext ,
94103 customErrorMessage : ( req , res ) =>
95104 `REQUEST FAILED WITH STATUS CODE: ${ res . statusCode } ` ,
96105 customErrorObject : ( req , res , error , val ) => {
97106 // Ignore errors that have already been handled by the error handler
98107 if ( val . err === HANDLED_ERROR ) {
99108 delete val . err ;
100109 }
101-
102- return addRequestContext ( req , res , val ) ;
110+ return val ;
103111 } ,
112+ customProps : getLogRequestContext ,
104113 customSuccessMessage : ( req , res ) =>
105114 `REQUEST ${ res . statusCode >= 400 ? "FAILED" : "COMPLETED" } WITH STATUS CODE OF: ${ res . statusCode } ` ,
106- customSuccessObject : addRequestContext ,
107115 customAttributeKeys : {
108116 responseTime : "timeTaken" ,
109117 } ,
0 commit comments