Skip to content

Commit 31fcc1e

Browse files
Copilotstephentoub
andauthored
Add request duration to LogRequestHandlerCompleted and LogRequestHandlerException log messages (#1092)
Co-authored-by: copilot-swe-agent[bot] <[email protected]> Co-authored-by: stephentoub <[email protected]>
1 parent d0ee6a0 commit 31fcc1e

File tree

1 file changed

+17
-10
lines changed

1 file changed

+17
-10
lines changed

src/ModelContextProtocol.Core/McpSessionHandler.cs

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -179,8 +179,6 @@ ex is OperationCanceledException &&
179179

180180
if (!isUserCancellation && message is JsonRpcRequest request)
181181
{
182-
LogRequestHandlerException(EndpointName, request.Method, ex);
183-
184182
JsonRpcErrorDetail detail = ex switch
185183
{
186184
UrlElicitationRequiredException urlException => new()
@@ -282,8 +280,19 @@ private async Task HandleMessageAsync(JsonRpcMessage message, CancellationToken
282280
switch (message)
283281
{
284282
case JsonRpcRequest request:
285-
var result = await HandleRequest(request, cancellationToken).ConfigureAwait(false);
286-
AddResponseTags(ref tags, activity, result, method);
283+
LogRequestHandlerCalled(EndpointName, request.Method);
284+
long requestStartingTimestamp = Stopwatch.GetTimestamp();
285+
try
286+
{
287+
var result = await HandleRequest(request, cancellationToken).ConfigureAwait(false);
288+
LogRequestHandlerCompleted(EndpointName, request.Method, GetElapsed(requestStartingTimestamp).TotalMilliseconds);
289+
AddResponseTags(ref tags, activity, result, method);
290+
}
291+
catch (Exception ex)
292+
{
293+
LogRequestHandlerException(EndpointName, request.Method, GetElapsed(requestStartingTimestamp).TotalMilliseconds, ex);
294+
throw;
295+
}
287296
break;
288297

289298
case JsonRpcNotification notification:
@@ -354,9 +363,7 @@ private void HandleMessageWithId(JsonRpcMessage message, JsonRpcMessageWithId me
354363
throw new McpProtocolException($"Method '{request.Method}' is not available.", McpErrorCode.MethodNotFound);
355364
}
356365

357-
LogRequestHandlerCalled(EndpointName, request.Method);
358366
JsonNode? result = await handler(request, cancellationToken).ConfigureAwait(false);
359-
LogRequestHandlerCompleted(EndpointName, request.Method);
360367

361368
await SendMessageAsync(new JsonRpcResponse
362369
{
@@ -882,11 +889,11 @@ private static McpProtocolException CreateRemoteProtocolException(JsonRpcError e
882889
[LoggerMessage(Level = LogLevel.Information, Message = "{EndpointName} method '{Method}' request handler called.")]
883890
private partial void LogRequestHandlerCalled(string endpointName, string method);
884891

885-
[LoggerMessage(Level = LogLevel.Information, Message = "{EndpointName} method '{Method}' request handler completed.")]
886-
private partial void LogRequestHandlerCompleted(string endpointName, string method);
892+
[LoggerMessage(Level = LogLevel.Information, Message = "{EndpointName} method '{Method}' request handler completed in {ElapsedMilliseconds}ms.")]
893+
private partial void LogRequestHandlerCompleted(string endpointName, string method, double elapsedMilliseconds);
887894

888-
[LoggerMessage(Level = LogLevel.Warning, Message = "{EndpointName} method '{Method}' request handler failed.")]
889-
private partial void LogRequestHandlerException(string endpointName, string method, Exception exception);
895+
[LoggerMessage(Level = LogLevel.Warning, Message = "{EndpointName} method '{Method}' request handler failed in {ElapsedMilliseconds}ms.")]
896+
private partial void LogRequestHandlerException(string endpointName, string method, double elapsedMilliseconds, Exception exception);
890897

891898
[LoggerMessage(Level = LogLevel.Information, Message = "{EndpointName} received request for unknown request ID '{RequestId}'.")]
892899
private partial void LogNoRequestFoundForMessageWithId(string endpointName, RequestId requestId);

0 commit comments

Comments
 (0)