Skip to content

Commit a8c746f

Browse files
committed
convert SC transports from NServiceBus.Logging to Microsoft.Extensions.Logging
1 parent 4f25d49 commit a8c746f

File tree

17 files changed

+102
-98
lines changed

17 files changed

+102
-98
lines changed

src/ServiceControl.Transports.ASBS/DeadLetterQueueCheck.cs

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,15 @@
44
using System.Threading;
55
using System.Threading.Tasks;
66
using Azure.Messaging.ServiceBus.Administration;
7+
using Microsoft.Extensions.Logging;
78
using NServiceBus.CustomChecks;
8-
using NServiceBus.Logging;
9+
using ServiceControl.Infrastructure;
910

1011
public class DeadLetterQueueCheck : CustomCheck
1112
{
1213
public DeadLetterQueueCheck(TransportSettings settings) : base(id: "Dead Letter Queue", category: "Transport", repeatAfter: TimeSpan.FromHours(1))
1314
{
14-
Logger.Debug("Azure Service Bus Dead Letter Queue custom check starting");
15+
Logger.LogDebug("Azure Service Bus Dead Letter Queue custom check starting");
1516

1617
connectionString = settings.ConnectionString;
1718
stagingQueue = $"{settings.EndpointName}.staging";
@@ -25,21 +26,19 @@ public override async Task<CheckResult> PerformCheck(CancellationToken cancellat
2526
return CheckResult.Pass;
2627
}
2728

28-
Logger.Debug("Checking Dead Letter Queue length");
29+
Logger.LogDebug("Checking Dead Letter Queue length");
2930
var managementClient = new ServiceBusAdministrationClient(connectionString);
3031

3132
var queueRuntimeInfo = await managementClient.GetQueueRuntimePropertiesAsync(stagingQueue, cancellationToken);
3233
var deadLetterMessageCount = queueRuntimeInfo.Value.DeadLetterMessageCount;
3334

3435
if (deadLetterMessageCount > 0)
3536
{
36-
var result = $"{deadLetterMessageCount} messages in the Dead Letter Queue '{stagingQueue}'. This could indicate a problem with ServiceControl's retries. Please submit a support ticket to Particular if you would like help from our engineers to ensure no message loss while resolving these dead letter messages.";
37-
38-
Logger.Warn(result);
39-
return CheckResult.Failed(result);
37+
Logger.LogWarning("{DeadLetterMessageCount} messages in the Dead Letter Queue '{StagingQueue}'. This could indicate a problem with ServiceControl's retries. Please submit a support ticket to Particular if you would like help from our engineers to ensure no message loss while resolving these dead letter messages.", deadLetterMessageCount, stagingQueue);
38+
return CheckResult.Failed($"{deadLetterMessageCount} messages in the Dead Letter Queue '{stagingQueue}'. This could indicate a problem with ServiceControl's retries. Please submit a support ticket to Particular if you would like help from our engineers to ensure no message loss while resolving these dead letter messages.");
4039
}
4140

42-
Logger.Debug("No messages in Dead Letter Queue");
41+
Logger.LogDebug("No messages in Dead Letter Queue");
4342

4443
return CheckResult.Pass;
4544
}
@@ -49,6 +48,6 @@ public override async Task<CheckResult> PerformCheck(CancellationToken cancellat
4948
bool runCheck;
5049

5150

52-
static readonly ILog Logger = LogManager.GetLogger(typeof(DeadLetterQueueCheck));
51+
static readonly ILogger Logger = LoggerUtil.CreateStaticLogger(typeof(DeadLetterQueueCheck));
5352
}
5453
}

src/ServiceControl.Transports.ASBS/QueueLengthProvider.cs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,18 @@ namespace ServiceControl.Transports.ASBS
66
using System.Threading;
77
using System.Threading.Tasks;
88
using Azure.Messaging.ServiceBus.Administration;
9-
using NServiceBus.Logging;
9+
using Microsoft.Extensions.Logging;
1010

1111
class QueueLengthProvider : AbstractQueueLengthProvider
1212
{
13-
public QueueLengthProvider(TransportSettings settings, Action<QueueLengthEntry[], EndpointToQueueMapping> store) : base(settings, store)
13+
public QueueLengthProvider(TransportSettings settings, Action<QueueLengthEntry[], EndpointToQueueMapping> store, ILogger<QueueLengthProvider> logger) : base(settings, store)
1414
{
1515
var connectionSettings = ConnectionStringParser.Parse(ConnectionString);
1616

1717
queryDelayInterval = connectionSettings.QueryDelayInterval ?? TimeSpan.FromMilliseconds(500);
1818

1919
managementClient = connectionSettings.AuthenticationMethod.BuildManagementClient();
20+
this.logger = logger;
2021
}
2122

2223
public override void TrackEndpointInputQueue(EndpointToQueueMapping queueToTrack) =>
@@ -32,14 +33,14 @@ protected override async Task ExecuteAsync(CancellationToken stoppingToken)
3233
{
3334
try
3435
{
35-
Logger.Debug("Waiting for next interval");
36+
logger.LogDebug("Waiting for next interval");
3637
await Task.Delay(queryDelayInterval, stoppingToken);
3738

38-
Logger.DebugFormat("Querying management client.");
39+
logger.LogDebug("Querying management client.");
3940

4041
var queueRuntimeInfos = await GetQueueList(stoppingToken);
4142

42-
Logger.DebugFormat("Retrieved details of {0} queues", queueRuntimeInfos.Count);
43+
logger.LogDebug("Retrieved details of {QueueCount} queues", queueRuntimeInfos.Count);
4344

4445
UpdateAllQueueLengths(queueRuntimeInfos);
4546
}
@@ -49,7 +50,7 @@ protected override async Task ExecuteAsync(CancellationToken stoppingToken)
4950
}
5051
catch (Exception e)
5152
{
52-
Logger.Error("Error querying Azure Service Bus queue sizes.", e);
53+
logger.LogError(e, "Error querying Azure Service Bus queue sizes.");
5354
}
5455
}
5556
}
@@ -109,7 +110,6 @@ void UpdateQueueLength(KeyValuePair<string, string> monitoredEndpoint, IReadOnly
109110
readonly ConcurrentDictionary<string, string> endpointQueueMappings = new ConcurrentDictionary<string, string>();
110111
readonly ServiceBusAdministrationClient managementClient;
111112
readonly TimeSpan queryDelayInterval;
112-
113-
static readonly ILog Logger = LogManager.GetLogger<QueueLengthProvider>();
113+
readonly ILogger<QueueLengthProvider> logger;
114114
}
115115
}

src/ServiceControl.Transports.ASQ/QueueLengthProvider.cs

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,22 @@
11
namespace ServiceControl.Transports.ASQ
22
{
33
using System;
4-
using System.Linq;
5-
using System.Threading.Tasks;
64
using System.Collections.Concurrent;
5+
using System.Linq;
76
using System.Threading;
8-
using NServiceBus.Logging;
7+
using System.Threading.Tasks;
98
using Azure.Storage.Queues;
109
using Azure.Storage.Queues.Models;
10+
using Microsoft.Extensions.Logging;
1111

1212
class QueueLengthProvider : AbstractQueueLengthProvider
1313
{
14-
public QueueLengthProvider(TransportSettings settings, Action<QueueLengthEntry[], EndpointToQueueMapping> store)
14+
public QueueLengthProvider(TransportSettings settings, Action<QueueLengthEntry[], EndpointToQueueMapping> store, ILogger<QueueLengthProvider> logger)
1515
: base(settings, store)
16-
=> connectionString = ConnectionString.RemoveCustomConnectionStringParts(out _);
16+
{
17+
connectionString = ConnectionString.RemoveCustomConnectionStringParts(out _);
18+
this.logger = logger;
19+
}
1720

1821
public override void TrackEndpointInputQueue(EndpointToQueueMapping queueToTrack)
1922
{
@@ -48,7 +51,7 @@ protected override async Task ExecuteAsync(CancellationToken stoppingToken)
4851
}
4952
catch (Exception e)
5053
{
51-
Logger.Error("Error querying sql queue sizes.", e);
54+
logger.LogError(e, "Error querying sql queue sizes.");
5255
}
5356
}
5457
}
@@ -76,7 +79,7 @@ async Task FetchLength(QueueLengthValue queueLength, CancellationToken cancellat
7679
// simple "log once" approach to do not flood logs
7780
if (problematicQueuesNames.TryAdd(queueLength.QueueName, queueLength.QueueName))
7881
{
79-
Logger.Error($"Obtaining Azure Storage Queue count failed for '{queueLength.QueueName}'", ex);
82+
logger.LogError(ex, "Obtaining Azure Storage Queue count failed for '{QueueName}'", queueLength.QueueName);
8083
}
8184
}
8285
}
@@ -102,7 +105,7 @@ void UpdateQueueLengthStore()
102105
readonly ConcurrentDictionary<EndpointToQueueMapping, QueueLengthValue> queueLengths = new ConcurrentDictionary<EndpointToQueueMapping, QueueLengthValue>();
103106
readonly ConcurrentDictionary<string, string> problematicQueuesNames = new ConcurrentDictionary<string, string>();
104107

105-
static readonly ILog Logger = LogManager.GetLogger<QueueLengthProvider>();
108+
readonly ILogger<QueueLengthProvider> logger;
106109
static readonly TimeSpan QueryDelayInterval = TimeSpan.FromMilliseconds(200);
107110

108111
class QueueLengthValue

src/ServiceControl.Transports.Learning/QueueLengthProvider.cs

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,17 @@
77
using System.Linq;
88
using System.Threading;
99
using System.Threading.Tasks;
10-
using NServiceBus.Logging;
10+
using Microsoft.Extensions.Logging;
1111
using ServiceControl.Transports.Learning;
1212

1313
class QueueLengthProvider : AbstractQueueLengthProvider
1414
{
15-
public QueueLengthProvider(TransportSettings settings, Action<QueueLengthEntry[], EndpointToQueueMapping> store)
16-
: base(settings, store) =>
15+
public QueueLengthProvider(TransportSettings settings, Action<QueueLengthEntry[], EndpointToQueueMapping> store, ILogger<QueueLengthProvider> logger)
16+
: base(settings, store)
17+
{
1718
rootFolder = LearningTransportCustomization.FindStoragePath(ConnectionString);
19+
this.logger = logger;
20+
}
1821

1922
public override void TrackEndpointInputQueue(EndpointToQueueMapping queueToTrack)
2023
=> endpointsHash.AddOrUpdate(queueToTrack, queueToTrack, (_, __) => queueToTrack);
@@ -36,7 +39,7 @@ protected override async Task ExecuteAsync(CancellationToken stoppingToken)
3639
}
3740
catch (Exception ex)
3841
{
39-
Log.Warn("Problem getting learning transport queue length", ex);
42+
logger.LogWarning(ex, "Problem getting learning transport queue length");
4043
}
4144
}
4245
}
@@ -60,7 +63,7 @@ void UpdateStore(ILookup<string, long?> queueLengths)
6063
}
6164
else
6265
{
63-
Log.Warn($"Queue Length data missing for queue {instance.InputQueue} (Endpoint {instance.EndpointName})");
66+
logger.LogWarning("Queue Length data missing for queue {InputQueue} (Endpoint {EndpointName})", instance.InputQueue, instance.EndpointName);
6467
}
6568
}
6669
}
@@ -87,7 +90,7 @@ void UpdateStore(ILookup<string, long?> queueLengths)
8790
readonly ConcurrentDictionary<EndpointToQueueMapping, EndpointToQueueMapping> endpointsHash = new ConcurrentDictionary<EndpointToQueueMapping, EndpointToQueueMapping>();
8891

8992
static readonly TimeSpan QueryDelayInterval = TimeSpan.FromMilliseconds(200);
90-
static readonly ILog Log = LogManager.GetLogger<QueueLengthProvider>();
93+
readonly ILogger<QueueLengthProvider> logger;
9194

9295
}
9396
}

src/ServiceControl.Transports.Msmq/DeadLetterQueueCheck.cs

Lines changed: 13 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,13 @@
55
using System.Diagnostics;
66
using System.Threading;
77
using System.Threading.Tasks;
8+
using Microsoft.Extensions.Logging;
89
using NServiceBus.CustomChecks;
9-
using NServiceBus.Logging;
1010
using Transports;
1111

1212
public class DeadLetterQueueCheck : CustomCheck
1313
{
14-
public DeadLetterQueueCheck(TransportSettings settings) :
14+
public DeadLetterQueueCheck(TransportSettings settings, ILogger<DeadLetterQueueCheck> logger) :
1515
base("Dead Letter Queue", "Transport", TimeSpan.FromHours(1))
1616
{
1717
runCheck = settings.RunCustomChecks;
@@ -20,7 +20,7 @@ public DeadLetterQueueCheck(TransportSettings settings) :
2020
return;
2121
}
2222

23-
Logger.Debug("MSMQ Dead Letter Queue custom check starting");
23+
logger.LogDebug("MSMQ Dead Letter Queue custom check starting");
2424

2525
categoryName = Read("Msmq/PerformanceCounterCategoryName", "MSMQ Queue");
2626
counterName = Read("Msmq/PerformanceCounterName", "Messages in Queue");
@@ -32,8 +32,10 @@ public DeadLetterQueueCheck(TransportSettings settings) :
3232
}
3333
catch (InvalidOperationException ex)
3434
{
35-
Logger.Error(CounterMightBeLocalized(categoryName, counterName, counterInstanceName), ex);
35+
logger.LogError(ex, CounterMightBeLocalized("CategoryName", "CounterName", "CounterInstanceName"), categoryName, counterName, counterInstanceName);
3636
}
37+
38+
this.logger = logger;
3739
}
3840

3941
public override Task<CheckResult> PerformCheck(CancellationToken cancellationToken = default)
@@ -43,9 +45,8 @@ public override Task<CheckResult> PerformCheck(CancellationToken cancellationTok
4345
return CheckResult.Pass;
4446
}
4547

46-
Logger.Debug("Checking Dead Letter Queue length");
48+
logger.LogDebug("Checking Dead Letter Queue length");
4749
float currentValue;
48-
string result;
4950
try
5051
{
5152
if (dlqPerformanceCounter == null)
@@ -57,25 +58,18 @@ public override Task<CheckResult> PerformCheck(CancellationToken cancellationTok
5758
}
5859
catch (InvalidOperationException ex)
5960
{
60-
result = CounterMightBeLocalized(categoryName, counterName, counterInstanceName);
61-
Logger.Warn(result, ex);
62-
return CheckResult.Failed(result);
61+
logger.LogWarning(ex, CounterMightBeLocalized("CategoryName", "CounterName", "CounterInstanceName"), categoryName, counterName, counterInstanceName);
62+
return CheckResult.Failed(CounterMightBeLocalized(categoryName, counterName, counterInstanceName));
6363
}
6464

6565
if (currentValue <= 0)
6666
{
67-
Logger.Debug("No messages in Dead Letter Queue");
67+
logger.LogDebug("No messages in Dead Letter Queue");
6868
return CheckResult.Pass;
6969
}
7070

71-
result = MessagesInDeadLetterQueue(currentValue);
72-
Logger.Warn(result);
73-
return CheckResult.Failed(result);
74-
}
75-
76-
static string MessagesInDeadLetterQueue(float currentValue)
77-
{
78-
return $"{currentValue} messages in the Dead Letter Queue on {Environment.MachineName}. This could indicate a problem with ServiceControl's retries. Please submit a support ticket to Particular if you would like help from our engineers to ensure no message loss while resolving these dead letter messages.";
71+
logger.LogWarning("{DeadLetterMessageCount} messages in the Dead Letter Queue on {MachineName}. This could indicate a problem with ServiceControl's retries. Please submit a support ticket to Particular if you would like help from our engineers to ensure no message loss while resolving these dead letter messages.", currentValue, Environment.MachineName);
72+
return CheckResult.Failed($"{currentValue} messages in the Dead Letter Queue on {Environment.MachineName}. This could indicate a problem with ServiceControl's retries. Please submit a support ticket to Particular if you would like help from our engineers to ensure no message loss while resolving these dead letter messages.");
7973
}
8074

8175
static string CounterMightBeLocalized(string categoryName, string counterName, string counterInstanceName)
@@ -123,6 +117,6 @@ static bool TryRead(string root, string name, out string value)
123117
string counterInstanceName;
124118
bool runCheck;
125119

126-
static readonly ILog Logger = LogManager.GetLogger(typeof(DeadLetterQueueCheck));
120+
readonly ILogger logger;
127121
}
128122
}

src/ServiceControl.Transports.PostgreSql.Tests/TransportTestsConfiguration.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
{
33
using System;
44
using System.Threading.Tasks;
5+
using ServiceControl.Infrastructure;
56
using ServiceControl.Transports.PostgreSql;
67
using Transports;
78

@@ -13,7 +14,7 @@ partial class TransportTestsConfiguration
1314

1415
public Task Configure()
1516
{
16-
TransportCustomization = new PostgreSqlTransportCustomization();
17+
TransportCustomization = new PostgreSqlTransportCustomization(LoggerUtil.CreateStaticLogger<PostgreSqlTransportCustomization>());
1718
ConnectionString = Environment.GetEnvironmentVariable(ConnectionStringKey);
1819

1920
if (string.IsNullOrEmpty(ConnectionString))

src/ServiceControl.Transports.PostgreSql/PostgreSqlTransportCustomization.cs

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,11 @@
44
using System.Runtime.CompilerServices;
55
using BrokerThroughput;
66
using Microsoft.Extensions.DependencyInjection;
7+
using Microsoft.Extensions.Logging;
78
using NServiceBus;
8-
using NServiceBus.Logging;
99
using NServiceBus.Transport.PostgreSql;
1010

11-
public class PostgreSqlTransportCustomization : TransportCustomization<PostgreSqlTransport>
11+
public class PostgreSqlTransportCustomization(ILogger<PostgreSqlTransportCustomization> logger) : TransportCustomization<PostgreSqlTransport>
1212
{
1313
protected override void CustomizeTransportForPrimaryEndpoint(EndpointConfiguration endpointConfiguration, PostgreSqlTransport transportDefinition, TransportSettings transportSettings)
1414
{
@@ -66,7 +66,7 @@ protected override PostgreSqlTransport CreateTransport(TransportSettings transpo
6666

6767
if (transportSettings.GetOrDefault<bool>("TransportSettings.EnableDtc"))
6868
{
69-
Logger.Error("The EnableDtc setting is no longer supported natively within ServiceControl. If you require distributed transactions, you will have to use a Transport Adapter (https://docs.particular.net/servicecontrol/transport-adapter/)");
69+
logger.LogError("The EnableDtc setting is no longer supported natively within ServiceControl. If you require distributed transactions, you will have to use a Transport Adapter (https://docs.particular.net/servicecontrol/transport-adapter/)");
7070
}
7171

7272
DisableDelayedDelivery(transport) = true;
@@ -93,6 +93,4 @@ protected override string ToTransportQualifiedQueueNameCore(string queueName)
9393
static extern ref bool DisableDelayedDelivery(PostgreSqlTransport transport);
9494

9595
const string DefaultSubscriptionTableName = "SubscriptionRouting";
96-
97-
static readonly ILog Logger = LogManager.GetLogger(typeof(PostgreSqlTransportCustomization));
9896
}

src/ServiceControl.Transports.PostgreSql/QueueLengthProvider.cs

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,18 @@
66
using System.Linq;
77
using System.Threading;
88
using System.Threading.Tasks;
9+
using Microsoft.Extensions.Logging;
910
using Npgsql;
10-
using NServiceBus.Logging;
1111

1212
class QueueLengthProvider : AbstractQueueLengthProvider
1313
{
14-
public QueueLengthProvider(TransportSettings settings, Action<QueueLengthEntry[], EndpointToQueueMapping> store) : base(settings, store)
14+
public QueueLengthProvider(TransportSettings settings, Action<QueueLengthEntry[], EndpointToQueueMapping> store, ILogger<QueueLengthProvider> logger) : base(settings, store)
1515
{
1616
connectionString = ConnectionString
1717
.RemoveCustomConnectionStringParts(out var customSchema, out _);
1818

1919
defaultSchema = customSchema ?? "public";
20+
this.logger = logger;
2021
}
2122
public override void TrackEndpointInputQueue(EndpointToQueueMapping queueToTrack)
2223
{
@@ -55,7 +56,7 @@ protected override async Task ExecuteAsync(CancellationToken stoppingToken)
5556
}
5657
catch (Exception e)
5758
{
58-
Logger.Error("Error querying sql queue sizes.", e);
59+
logger.LogError(e, "Error querying SQL queue sizes.");
5960
}
6061
}
6162
}
@@ -113,7 +114,7 @@ async Task UpdateChunk(NpgsqlConnection connection, KeyValuePair<PostgreSqlTable
113114

114115
if (queueLength == -1)
115116
{
116-
Logger.Warn($"Table {chunkPair.Key} does not exist.");
117+
logger.LogWarning("Table {TableName} does not exist.", chunkPair.Key);
117118
}
118119
else
119120
{
@@ -130,7 +131,7 @@ async Task UpdateChunk(NpgsqlConnection connection, KeyValuePair<PostgreSqlTable
130131
readonly string connectionString;
131132
readonly string defaultSchema;
132133

133-
static readonly ILog Logger = LogManager.GetLogger<QueueLengthProvider>();
134+
readonly ILogger<QueueLengthProvider> logger;
134135

135136
static readonly TimeSpan QueryDelayInterval = TimeSpan.FromMilliseconds(200);
136137

0 commit comments

Comments
 (0)