Skip to content

Commit 75bfca5

Browse files
Copilotstephentoub
andcommitted
Add duration logging to LogRequestHandlerException and consolidate timing in HandleMessageAsync
Co-authored-by: stephentoub <[email protected]>
1 parent 54dad60 commit 75bfca5

File tree

1 file changed

+14
-8
lines changed

1 file changed

+14
-8
lines changed

src/ModelContextProtocol.Core/McpSessionHandler.cs

Lines changed: 14 additions & 8 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,18 @@ 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+
long requestStartingTimestamp = Stopwatch.GetTimestamp();
284+
try
285+
{
286+
var result = await HandleRequest(request, cancellationToken).ConfigureAwait(false);
287+
LogRequestHandlerCompleted(EndpointName, request.Method, GetElapsed(requestStartingTimestamp).TotalMilliseconds);
288+
AddResponseTags(ref tags, activity, result, method);
289+
}
290+
catch (Exception ex)
291+
{
292+
LogRequestHandlerException(EndpointName, request.Method, GetElapsed(requestStartingTimestamp).TotalMilliseconds, ex);
293+
throw;
294+
}
287295
break;
288296

289297
case JsonRpcNotification notification:
@@ -355,9 +363,7 @@ private void HandleMessageWithId(JsonRpcMessage message, JsonRpcMessageWithId me
355363
}
356364

357365
LogRequestHandlerCalled(EndpointName, request.Method);
358-
long startingTimestamp = Stopwatch.GetTimestamp();
359366
JsonNode? result = await handler(request, cancellationToken).ConfigureAwait(false);
360-
LogRequestHandlerCompleted(EndpointName, request.Method, GetElapsed(startingTimestamp).TotalMilliseconds);
361367

362368
await SendMessageAsync(new JsonRpcResponse
363369
{
@@ -886,8 +892,8 @@ private static McpProtocolException CreateRemoteProtocolException(JsonRpcError e
886892
[LoggerMessage(Level = LogLevel.Information, Message = "{EndpointName} method '{Method}' request handler completed in {ElapsedMilliseconds}ms.")]
887893
private partial void LogRequestHandlerCompleted(string endpointName, string method, double elapsedMilliseconds);
888894

889-
[LoggerMessage(Level = LogLevel.Warning, Message = "{EndpointName} method '{Method}' request handler failed.")]
890-
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);
891897

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

0 commit comments

Comments
 (0)