Make transport logs for connection close more detailed and consistent (#2978)
This commit is contained in:
parent
21e9c12b62
commit
5bd2a41517
|
|
@ -14,8 +14,6 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv.Internal
|
||||||
|
|
||||||
void ConnectionWriteFin(string connectionId);
|
void ConnectionWriteFin(string connectionId);
|
||||||
|
|
||||||
void ConnectionWroteFin(string connectionId, int status);
|
|
||||||
|
|
||||||
void ConnectionWrite(string connectionId, int count);
|
void ConnectionWrite(string connectionId, int count);
|
||||||
|
|
||||||
void ConnectionWriteCallback(string connectionId, int status);
|
void ConnectionWriteCallback(string connectionId, int status);
|
||||||
|
|
@ -28,6 +26,6 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv.Internal
|
||||||
|
|
||||||
void ConnectionResume(string connectionId);
|
void ConnectionResume(string connectionId);
|
||||||
|
|
||||||
void ConnectionAborted(string connectionId);
|
void ConnectionAborted(string connectionId, string message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -119,7 +119,11 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv.Internal
|
||||||
|
|
||||||
public override void Abort(ConnectionAbortedException abortReason)
|
public override void Abort(ConnectionAbortedException abortReason)
|
||||||
{
|
{
|
||||||
|
Log.ConnectionAborted(ConnectionId, abortReason?.Message);
|
||||||
|
|
||||||
_abortReason = abortReason;
|
_abortReason = abortReason;
|
||||||
|
|
||||||
|
// Cancel WriteOutputAsync loop after setting _abortReason.
|
||||||
Output.CancelPendingRead();
|
Output.CancelPendingRead();
|
||||||
|
|
||||||
// This cancels any pending I/O.
|
// This cancels any pending I/O.
|
||||||
|
|
|
||||||
|
|
@ -22,9 +22,6 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv.Internal
|
||||||
private static readonly Action<ILogger, string, Exception> _connectionWriteFin =
|
private static readonly Action<ILogger, string, Exception> _connectionWriteFin =
|
||||||
LoggerMessage.Define<string>(LogLevel.Debug, new EventId(7, nameof(ConnectionWriteFin)), @"Connection id ""{ConnectionId}"" sending FIN.");
|
LoggerMessage.Define<string>(LogLevel.Debug, new EventId(7, nameof(ConnectionWriteFin)), @"Connection id ""{ConnectionId}"" sending FIN.");
|
||||||
|
|
||||||
private static readonly Action<ILogger, string, int, Exception> _connectionWroteFin =
|
|
||||||
LoggerMessage.Define<string, int>(LogLevel.Debug, new EventId(8, nameof(ConnectionWroteFin)), @"Connection id ""{ConnectionId}"" sent FIN with status ""{Status}"".");
|
|
||||||
|
|
||||||
// ConnectionWrite: Reserved: 11
|
// ConnectionWrite: Reserved: 11
|
||||||
|
|
||||||
// ConnectionWriteCallback: Reserved: 12
|
// ConnectionWriteCallback: Reserved: 12
|
||||||
|
|
@ -35,8 +32,8 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv.Internal
|
||||||
private static readonly Action<ILogger, string, Exception> _connectionReset =
|
private static readonly Action<ILogger, string, Exception> _connectionReset =
|
||||||
LoggerMessage.Define<string>(LogLevel.Debug, new EventId(19, nameof(ConnectionReset)), @"Connection id ""{ConnectionId}"" reset.");
|
LoggerMessage.Define<string>(LogLevel.Debug, new EventId(19, nameof(ConnectionReset)), @"Connection id ""{ConnectionId}"" reset.");
|
||||||
|
|
||||||
private static readonly Action<ILogger, string, Exception> _connectionAborted =
|
private static readonly Action<ILogger, string, string, Exception> _connectionAborted =
|
||||||
LoggerMessage.Define<string>(LogLevel.Debug, new EventId(20, nameof(ConnectionAborted)), @"Connection id ""{ConnectionId}"" aborted.");
|
LoggerMessage.Define<string, string>(LogLevel.Debug, new EventId(20, nameof(ConnectionAborted)), @"Connection id ""{ConnectionId}"" closing because: ""{Message}""");
|
||||||
|
|
||||||
private readonly ILogger _logger;
|
private readonly ILogger _logger;
|
||||||
|
|
||||||
|
|
@ -61,11 +58,6 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv.Internal
|
||||||
_connectionWriteFin(_logger, connectionId, null);
|
_connectionWriteFin(_logger, connectionId, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ConnectionWroteFin(string connectionId, int status)
|
|
||||||
{
|
|
||||||
_connectionWroteFin(_logger, connectionId, status, null);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void ConnectionWrite(string connectionId, int count)
|
public void ConnectionWrite(string connectionId, int count)
|
||||||
{
|
{
|
||||||
// Don't log for now since this could be *too* verbose.
|
// Don't log for now since this could be *too* verbose.
|
||||||
|
|
@ -98,9 +90,9 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv.Internal
|
||||||
_connectionResume(_logger, connectionId, null);
|
_connectionResume(_logger, connectionId, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ConnectionAborted(string connectionId)
|
public void ConnectionAborted(string connectionId, string message)
|
||||||
{
|
{
|
||||||
_connectionAborted(_logger, connectionId, null);
|
_connectionAborted(_logger, connectionId, message, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public IDisposable BeginScope<TState>(TState state) => _logger.BeginScope(state);
|
public IDisposable BeginScope<TState>(TState state) => _logger.BeginScope(state);
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,6 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.Internal
|
||||||
|
|
||||||
void ConnectionResume(string connectionId);
|
void ConnectionResume(string connectionId);
|
||||||
|
|
||||||
void ConnectionAborted(string connectionId);
|
void ConnectionAborted(string connectionId, string message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -92,7 +92,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.Internal
|
||||||
|
|
||||||
public override void Abort(ConnectionAbortedException abortReason)
|
public override void Abort(ConnectionAbortedException abortReason)
|
||||||
{
|
{
|
||||||
_trace.ConnectionAborted(ConnectionId);
|
_trace.ConnectionAborted(ConnectionId, abortReason?.Message);
|
||||||
|
|
||||||
// Try to gracefully close the socket to match libuv behavior.
|
// Try to gracefully close the socket to match libuv behavior.
|
||||||
Shutdown(abortReason);
|
Shutdown(abortReason);
|
||||||
|
|
|
||||||
|
|
@ -22,14 +22,18 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.Internal
|
||||||
private static readonly Action<ILogger, string, Exception> _connectionWriteFin =
|
private static readonly Action<ILogger, string, Exception> _connectionWriteFin =
|
||||||
LoggerMessage.Define<string>(LogLevel.Debug, new EventId(7, nameof(ConnectionWriteFin)), @"Connection id ""{ConnectionId}"" sending FIN.");
|
LoggerMessage.Define<string>(LogLevel.Debug, new EventId(7, nameof(ConnectionWriteFin)), @"Connection id ""{ConnectionId}"" sending FIN.");
|
||||||
|
|
||||||
|
// ConnectionWrite: Reserved: 11
|
||||||
|
|
||||||
|
// ConnectionWriteCallback: Reserved: 12
|
||||||
|
|
||||||
private static readonly Action<ILogger, string, Exception> _connectionError =
|
private static readonly Action<ILogger, string, Exception> _connectionError =
|
||||||
LoggerMessage.Define<string>(LogLevel.Information, new EventId(14, nameof(ConnectionError)), @"Connection id ""{ConnectionId}"" communication error.");
|
LoggerMessage.Define<string>(LogLevel.Information, new EventId(14, nameof(ConnectionError)), @"Connection id ""{ConnectionId}"" communication error.");
|
||||||
|
|
||||||
private static readonly Action<ILogger, string, Exception> _connectionReset =
|
private static readonly Action<ILogger, string, Exception> _connectionReset =
|
||||||
LoggerMessage.Define<string>(LogLevel.Debug, new EventId(19, nameof(ConnectionReset)), @"Connection id ""{ConnectionId}"" reset.");
|
LoggerMessage.Define<string>(LogLevel.Debug, new EventId(19, nameof(ConnectionReset)), @"Connection id ""{ConnectionId}"" reset.");
|
||||||
|
|
||||||
private static readonly Action<ILogger, string, Exception> _connectionAborted =
|
private static readonly Action<ILogger, string, string, Exception> _connectionAborted =
|
||||||
LoggerMessage.Define<string>(LogLevel.Debug, new EventId(20, nameof(ConnectionAborted)), @"Connection id ""{ConnectionId}"" aborted.");
|
LoggerMessage.Define<string, string>(LogLevel.Debug, new EventId(20, nameof(ConnectionAborted)), @"Connection id ""{ConnectionId}"" closing because: ""{Message}""");
|
||||||
|
|
||||||
private readonly ILogger _logger;
|
private readonly ILogger _logger;
|
||||||
|
|
||||||
|
|
@ -86,9 +90,9 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.Internal
|
||||||
_connectionResume(_logger, connectionId, null);
|
_connectionResume(_logger, connectionId, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ConnectionAborted(string connectionId)
|
public void ConnectionAborted(string connectionId, string message)
|
||||||
{
|
{
|
||||||
_connectionAborted(_logger, connectionId, null);
|
_connectionAborted(_logger, connectionId, message, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public IDisposable BeginScope<TState>(TState state) => _logger.BeginScope(state);
|
public IDisposable BeginScope<TState>(TState state) => _logger.BeginScope(state);
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,7 @@ using System.Net;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using Microsoft.AspNetCore.Connections;
|
using Microsoft.AspNetCore.Connections;
|
||||||
using Microsoft.AspNetCore.Server.Kestrel.Transport.Abstractions.Internal;
|
using Microsoft.AspNetCore.Server.Kestrel.Transport.Abstractions.Internal;
|
||||||
|
using Microsoft.Extensions.Logging;
|
||||||
|
|
||||||
namespace Microsoft.AspNetCore.Server.Kestrel.InMemory.FunctionalTests.TestTransport
|
namespace Microsoft.AspNetCore.Server.Kestrel.InMemory.FunctionalTests.TestTransport
|
||||||
{
|
{
|
||||||
|
|
@ -15,11 +16,13 @@ namespace Microsoft.AspNetCore.Server.Kestrel.InMemory.FunctionalTests.TestTrans
|
||||||
{
|
{
|
||||||
private readonly CancellationTokenSource _connectionClosedTokenSource = new CancellationTokenSource();
|
private readonly CancellationTokenSource _connectionClosedTokenSource = new CancellationTokenSource();
|
||||||
|
|
||||||
|
private readonly ILogger _logger;
|
||||||
private bool _isClosed;
|
private bool _isClosed;
|
||||||
|
|
||||||
public InMemoryTransportConnection(MemoryPool<byte> memoryPool)
|
public InMemoryTransportConnection(MemoryPool<byte> memoryPool, ILogger logger)
|
||||||
{
|
{
|
||||||
MemoryPool = memoryPool;
|
MemoryPool = memoryPool;
|
||||||
|
_logger = logger;
|
||||||
|
|
||||||
LocalAddress = IPAddress.Loopback;
|
LocalAddress = IPAddress.Loopback;
|
||||||
RemoteAddress = IPAddress.Loopback;
|
RemoteAddress = IPAddress.Loopback;
|
||||||
|
|
@ -28,6 +31,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.InMemory.FunctionalTests.TestTrans
|
||||||
}
|
}
|
||||||
|
|
||||||
public override MemoryPool<byte> MemoryPool { get; }
|
public override MemoryPool<byte> MemoryPool { get; }
|
||||||
|
|
||||||
public override PipeScheduler InputWriterScheduler => PipeScheduler.ThreadPool;
|
public override PipeScheduler InputWriterScheduler => PipeScheduler.ThreadPool;
|
||||||
public override PipeScheduler OutputReaderScheduler => PipeScheduler.ThreadPool;
|
public override PipeScheduler OutputReaderScheduler => PipeScheduler.ThreadPool;
|
||||||
|
|
||||||
|
|
@ -35,6 +39,8 @@ namespace Microsoft.AspNetCore.Server.Kestrel.InMemory.FunctionalTests.TestTrans
|
||||||
|
|
||||||
public override void Abort(ConnectionAbortedException abortReason)
|
public override void Abort(ConnectionAbortedException abortReason)
|
||||||
{
|
{
|
||||||
|
_logger.LogDebug(@"Connection id ""{ConnectionId}"" closing because: ""{Message}""", ConnectionId, abortReason?.Message);
|
||||||
|
|
||||||
Input.Complete(abortReason);
|
Input.Complete(abortReason);
|
||||||
|
|
||||||
AbortReason = abortReason;
|
AbortReason = abortReason;
|
||||||
|
|
|
||||||
|
|
@ -96,7 +96,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.InMemory.FunctionalTests.TestTrans
|
||||||
|
|
||||||
public InMemoryConnection CreateConnection()
|
public InMemoryConnection CreateConnection()
|
||||||
{
|
{
|
||||||
var transportConnection = new InMemoryTransportConnection(_memoryPool);
|
var transportConnection = new InMemoryTransportConnection(_memoryPool, Context.Log);
|
||||||
_ = HandleConnection(transportConnection);
|
_ = HandleConnection(transportConnection);
|
||||||
return new InMemoryConnection(transportConnection);
|
return new InMemoryConnection(transportConnection);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue