Skip to content

Commit

Permalink
Expose LoggingSettings through Settings
Browse files Browse the repository at this point in the history
  • Loading branch information
bording committed Mar 21, 2024
1 parent a0100ab commit 2359609
Show file tree
Hide file tree
Showing 43 changed files with 201 additions and 187 deletions.
Expand Up @@ -54,7 +54,7 @@ public async Task CanRunMaintenanceMode()

[Test]
public async Task CanRunImportFailedMessagesMode()
=> await new TestableImportFailedErrorsCommand().Execute(new HostArguments(Array.Empty<string>()), settings, new LoggingSettings());
=> await new TestableImportFailedErrorsCommand().Execute(new HostArguments(Array.Empty<string>()), settings);

class TestableImportFailedErrorsCommand : ImportFailedErrorsCommand
{
Expand Down
Expand Up @@ -45,7 +45,11 @@ public ServiceControlComponentRunner(ITransportIntegration transportToUse, Accep

async Task InitializeServiceControl(ScenarioContext context)
{
var settings = new Settings(instanceName, transportToUse.TypeName, persistenceToUse.PersistenceType, forwardErrorMessages: false, errorRetentionPeriod: TimeSpan.FromDays(10))
var logPath = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName());
Directory.CreateDirectory(logPath);
var loggingSettings = new LoggingSettings(defaultLevel: LogLevel.Debug, logPath: logPath);

var settings = new Settings(instanceName, transportToUse.TypeName, persistenceToUse.PersistenceType, loggingSettings, forwardErrorMessages: false, errorRetentionPeriod: TimeSpan.FromDays(10))
{
AllowMessageEditing = true,
ForwardErrorMessages = false,
Expand Down Expand Up @@ -92,14 +96,10 @@ async Task InitializeServiceControl(ScenarioContext context)
setSettings(settings);
Settings = settings;

var logPath = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName());
Directory.CreateDirectory(logPath);
var loggingSettings = new LoggingSettings(defaultLevel: LogLevel.Debug, logPath: logPath);

using (new DiagnosticTimer($"Creating infrastructure for {instanceName}"))
{
var setupCommand = new SetupCommand();
await setupCommand.Execute(new HostArguments([]), settings, loggingSettings);
await setupCommand.Execute(new HostArguments([]), settings);
}

var configuration = new EndpointConfiguration(instanceName);
Expand All @@ -114,7 +114,7 @@ async Task InitializeServiceControl(ScenarioContext context)
// Force the DI container to run the dependency resolution check to verify all dependencies can be resolved
EnvironmentName = Environments.Development
});
hostBuilder.AddServiceControl(settings, configuration, loggingSettings);
hostBuilder.AddServiceControl(settings, configuration);
hostBuilder.AddServiceControlApi();

hostBuilder.AddServiceControlTesting(settings);
Expand Down
Expand Up @@ -38,7 +38,12 @@ public class ServiceControlComponentRunner(

async Task InitializeServiceControl(ScenarioContext context)
{
settings = new Settings(instanceName, transportToUse.TypeName, persistenceToUse.PersistenceType)
var logPath = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName());
Directory.CreateDirectory(logPath);

var loggingSettings = new LoggingSettings(defaultLevel: NLog.LogLevel.Debug, logPath: logPath);

settings = new Settings(instanceName, transportToUse.TypeName, persistenceToUse.PersistenceType, loggingSettings)
{
TransportConnectionString = transportToUse.ConnectionString,
MaximumConcurrencyLevel = 2,
Expand Down Expand Up @@ -88,15 +93,10 @@ async Task InitializeServiceControl(ScenarioContext context)
ConfigurationManager.AppSettings.Set($"ServiceControl.Audit/{persisterSpecificSetting.Key}", persisterSpecificSetting.Value);
}

var logPath = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName());
Directory.CreateDirectory(logPath);

var loggingSettings = new LoggingSettings(defaultLevel: NLog.LogLevel.Debug, logPath: logPath);

using (new DiagnosticTimer($"Creating infrastructure for {instanceName}"))
{
var setupCommand = new SetupCommand();
await setupCommand.Execute(new HostArguments([]), settings, loggingSettings);
await setupCommand.Execute(new HostArguments([]), settings);
}

var configuration = new EndpointConfiguration(instanceName);
Expand All @@ -122,7 +122,7 @@ async Task InitializeServiceControl(ScenarioContext context)
};
context.Logs.Enqueue(logitem);
return criticalErrorContext.Stop(cancellationToken);
}, settings, configuration, loggingSettings);
}, settings, configuration);

hostBuilder.AddServiceControlAuditApi();

Expand Down
5 changes: 1 addition & 4 deletions src/ServiceControl.Audit.UnitTests/API/APIApprovals.cs
Expand Up @@ -30,10 +30,7 @@ public void RootPathValue()

var settings = CreateTestSettings();

var controller = new RootController(
new LoggingSettings(),
settings
)
var controller = new RootController(settings)
{
ControllerContext = controllerContext,
Url = new UrlHelper(actionContext)
Expand Down
@@ -1,4 +1,11 @@
{
"LoggingSettings": {
"LogLevel": {
"Name": "Info",
"Ordinal": 2
},
"LogPath": "C:\\Logs"
},
"MessageFilter": null,
"ValidateConfiguration": true,
"SkipQueueCreation": false,
Expand Down
Expand Up @@ -21,13 +21,13 @@ public async Task Should_provision_queues()
{
var instanceInputQueueName = "SomeInstanceQueue";

var settings = new Settings(instanceInputQueueName, typeof(FakeTransport).AssemblyQualifiedName, typeof(FakePersistenceConfiguration).AssemblyQualifiedName)
var settings = new Settings(instanceInputQueueName, typeof(FakeTransport).AssemblyQualifiedName, typeof(FakePersistenceConfiguration).AssemblyQualifiedName, new LoggingSettings())
{
ForwardAuditMessages = true,
};

var setupCommand = new SetupCommand();
await setupCommand.Execute(new HostArguments([]), settings, new LoggingSettings());
await setupCommand.Execute(new HostArguments([]), settings);

CollectionAssert.AreEquivalent(new[]
{
Expand Down
19 changes: 8 additions & 11 deletions src/ServiceControl.Audit/HostApplicationBuilderExtensions.cs
Expand Up @@ -2,7 +2,6 @@ namespace ServiceControl.Audit;

using System;
using System.Diagnostics;
using System.Net;
using System.Threading;
using System.Threading.Tasks;
using Auditing;
Expand All @@ -27,14 +26,13 @@ static class HostApplicationBuilderExtensions
public static void AddServiceControlAudit(this IHostApplicationBuilder builder,
Func<ICriticalErrorContext, CancellationToken, Task> onCriticalError,
Settings settings,
EndpointConfiguration configuration,
LoggingSettings loggingSettings)
EndpointConfiguration configuration)
{
var persistenceConfiguration =
PersistenceConfigurationFactory.LoadPersistenceConfiguration(settings.PersistenceType);
var persistenceSettings = persistenceConfiguration.BuildPersistenceSettings(settings);

RecordStartup(settings, loggingSettings, configuration, persistenceConfiguration);
RecordStartup(settings, configuration, persistenceConfiguration);

if (!string.IsNullOrWhiteSpace(settings.LicenseFileText))
{
Expand All @@ -46,15 +44,15 @@ static class HostApplicationBuilderExtensions

builder.Logging.ClearProviders();
builder.Logging.AddNLog();
builder.Logging.SetMinimumLevel(loggingSettings.ToHostLogLevel());
builder.Logging.SetMinimumLevel(settings.LoggingSettings.ToHostLogLevel());

var services = builder.Services;

services.Configure<HostOptions>(options => options.ShutdownTimeout = TimeSpan.FromSeconds(30));
services.AddSingleton(transportSettings);
services.AddSingleton(transportCustomization);

services.AddSingleton(loggingSettings);
services.AddSingleton(settings.LoggingSettings);
services.AddSingleton(settings);
services.AddSingleton<EndpointInstanceMonitoring>();
services.AddSingleton<AuditIngestor>();
Expand All @@ -76,7 +74,7 @@ static class HostApplicationBuilderExtensions

services.AddPersistence(persistenceSettings, persistenceConfiguration);

NServiceBusFactory.Configure(settings, transportCustomization, transportSettings, loggingSettings, onCriticalError, configuration);
NServiceBusFactory.Configure(settings, transportCustomization, transportSettings, onCriticalError, configuration);
builder.UseNServiceBus(configuration);

// Configure after the NServiceBus hosted service to ensure NServiceBus is already started
Expand All @@ -99,7 +97,7 @@ static TransportSettings MapSettings(Settings settings)
return transportSettings;
}

static void RecordStartup(Settings settings, LoggingSettings loggingSettings, EndpointConfiguration endpointConfiguration, IPersistenceConfiguration persistenceConfiguration)
static void RecordStartup(Settings settings, EndpointConfiguration endpointConfiguration, IPersistenceConfiguration persistenceConfiguration)
{
var version = FileVersionInfo.GetVersionInfo(typeof(HostApplicationBuilderExtensions).Assembly.Location).ProductVersion;

Expand All @@ -108,7 +106,7 @@ static void RecordStartup(Settings settings, LoggingSettings loggingSettings, En
ServiceControl Audit Version: {version}
Audit Retention Period: {settings.AuditRetentionPeriod}
Forwarding Audit Messages: {settings.ForwardAuditMessages}
ServiceControl Logging Level: {loggingSettings.LoggingLevel}
ServiceControl Logging Level: {settings.LoggingSettings.LogLevel}
Transport Customization: {settings.TransportType},
Persistence Customization: {settings.PersistenceType},
Persistence: {persistenceConfiguration.Name}
Expand All @@ -118,8 +116,7 @@ static void RecordStartup(Settings settings, LoggingSettings loggingSettings, En
logger.Info(startupMessage);
endpointConfiguration.GetSettings().AddStartupDiagnosticsSection("Startup", new
{
Settings = settings,
LoggingSettings = loggingSettings
Settings = settings
});
}
}
Expand Up @@ -5,6 +5,6 @@

abstract class AbstractCommand
{
public abstract Task Execute(HostArguments args, Settings settings, LoggingSettings loggingSettings);
public abstract Task Execute(HostArguments args, Settings settings);
}
}
Expand Up @@ -7,12 +7,12 @@

class CommandRunner(List<Type> commands)
{
public async Task Execute(HostArguments args, Settings settings, LoggingSettings loggingSettings)
public async Task Execute(HostArguments args, Settings settings)
{
foreach (var commandType in commands)
{
var command = (AbstractCommand)Activator.CreateInstance(commandType);
await command.Execute(args, settings, loggingSettings);
await command.Execute(args, settings);
}
}
}
Expand Down
Expand Up @@ -11,7 +11,7 @@

class ImportFailedAuditsCommand : AbstractCommand
{
public override async Task Execute(HostArguments args, Settings settings, LoggingSettings loggingSettings)
public override async Task Execute(HostArguments args, Settings settings)
{
settings.IngestAuditMessages = false;

Expand All @@ -24,7 +24,7 @@ public override async Task Execute(HostArguments args, Settings settings, Loggin
{
tokenSource.Cancel();
return Task.CompletedTask;
}, settings, endpointConfiguration, loggingSettings);
}, settings, endpointConfiguration);

using var app = hostBuilder.Build();
await app.StartAsync(tokenSource.Token);
Expand Down
Expand Up @@ -9,7 +9,7 @@

class MaintenanceModeCommand : AbstractCommand
{
public override async Task Execute(HostArguments args, Settings settings, LoggingSettings loggingSettings)
public override async Task Execute(HostArguments args, Settings settings)
{
var persistenceConfiguration = PersistenceConfigurationFactory.LoadPersistenceConfiguration(settings.PersistenceType);
var persistenceSettings = persistenceConfiguration.BuildPersistenceSettings(settings);
Expand Down
Expand Up @@ -8,7 +8,7 @@

class RunCommand : AbstractCommand
{
public override async Task Execute(HostArguments args, Settings settings, LoggingSettings loggingSettings)
public override async Task Execute(HostArguments args, Settings settings)
{
var endpointConfiguration = new EndpointConfiguration(settings.ServiceName);
var assemblyScanner = endpointConfiguration.AssemblyScanner();
Expand All @@ -19,7 +19,7 @@ public override async Task Execute(HostArguments args, Settings settings, Loggin
{
//Do nothing. The transports in NSB 8 are designed to handle broker outages. Audit ingestion will be paused when broker is unavailable.
return Task.CompletedTask;
}, settings, endpointConfiguration, loggingSettings);
}, settings, endpointConfiguration);
hostBuilder.AddServiceControlAuditApi();

var app = hostBuilder.Build();
Expand Down
Expand Up @@ -10,7 +10,7 @@

class SetupCommand : AbstractCommand
{
public override async Task Execute(HostArguments args, Settings settings, LoggingSettings loggingSettings)
public override async Task Execute(HostArguments args, Settings settings)
{
settings.SkipQueueCreation = args.SkipQueueCreation;

Expand Down
Expand Up @@ -50,16 +50,16 @@ public static void ConfigureLogging(LoggingSettings loggingSettings)
nlogConfig.LoggingRules.Add(new LoggingRule("Particular.ServiceControl.Licensing.*", LogLevel.Info, consoleTarget));

// Defaults
nlogConfig.LoggingRules.Add(new LoggingRule("*", loggingSettings.LoggingLevel, fileTarget));
nlogConfig.LoggingRules.Add(new LoggingRule("*", loggingSettings.LoggingLevel < LogLevel.Info ? loggingSettings.LoggingLevel : LogLevel.Info, consoleTarget));
nlogConfig.LoggingRules.Add(new LoggingRule("*", loggingSettings.LogLevel, fileTarget));
nlogConfig.LoggingRules.Add(new LoggingRule("*", loggingSettings.LogLevel < LogLevel.Info ? loggingSettings.LogLevel : LogLevel.Info, consoleTarget));

NLog.LogManager.Configuration = nlogConfig;

LogManager.UseFactory(new ExtensionsLoggerFactory(new NLogLoggerFactory()));

var logger = LogManager.GetLogger("LoggingConfiguration");
var logEventInfo = new LogEventInfo { TimeStamp = DateTime.UtcNow };
logger.InfoFormat("Logging to {0} with LogLevel '{1}'", fileTarget.FileName.Render(logEventInfo), loggingSettings.LoggingLevel.Name);
logger.InfoFormat("Logging to {0} with LogLevel '{1}'", fileTarget.FileName.Render(logEventInfo), loggingSettings.LogLevel.Name);
}

const long megaByte = 1024 * 1024;
Expand Down
7 changes: 3 additions & 4 deletions src/ServiceControl.Audit/Infrastructure/NServiceBusFactory.cs
Expand Up @@ -9,13 +9,12 @@ namespace ServiceControl.Audit.Infrastructure
using NServiceBus;
using NServiceBus.Configuration.AdvancedExtensibility;
using ServiceControl.Infrastructure;
using Settings;
using Transports;

static class NServiceBusFactory
{
public static void Configure(Settings.Settings settings, ITransportCustomization transportCustomization,
TransportSettings transportSettings, LoggingSettings loggingSettings,
TransportSettings transportSettings,
Func<ICriticalErrorContext, CancellationToken, Task> onCriticalError, EndpointConfiguration configuration)
{
var endpointName = settings.ServiceName;
Expand Down Expand Up @@ -47,8 +46,8 @@ static class NServiceBusFactory
configuration.ReportCustomChecksTo(settings.ServiceControlQueueAddress);
}

configuration.GetSettings().Set(loggingSettings);
configuration.SetDiagnosticsPath(loggingSettings.LogPath);
configuration.GetSettings().Set(settings.LoggingSettings);
configuration.SetDiagnosticsPath(settings.LoggingSettings.LogPath);

configuration.UseSerialization<NewtonsoftJsonSerializer>();

Expand Down
Expand Up @@ -8,7 +8,7 @@ namespace ServiceControl.Audit.Infrastructure.Settings

public class LoggingSettings(LogLevel defaultLevel = null, string logPath = null)
{
public LogLevel LoggingLevel { get; } = InitializeLogLevel(defaultLevel);
public LogLevel LogLevel { get; } = InitializeLogLevel(defaultLevel);

public string LogPath { get; } = SettingsReader.Read(Settings.SettingsRootNamespace, "LogPath", Environment.ExpandEnvironmentVariables(logPath ?? DefaultLogLocation()));

Expand Down Expand Up @@ -38,14 +38,14 @@ static LogLevel InitializeLogLevel(LogLevel defaultLevel)
// debugging or if the entry is removed manually. In those circumstances default to the folder containing the exe
static string DefaultLogLocation() => Path.Combine(AppContext.BaseDirectory, ".logs");

public Microsoft.Extensions.Logging.LogLevel ToHostLogLevel() => LoggingLevel switch
public Microsoft.Extensions.Logging.LogLevel ToHostLogLevel() => LogLevel switch
{
_ when LoggingLevel == LogLevel.Trace => Microsoft.Extensions.Logging.LogLevel.Trace,
_ when LoggingLevel == LogLevel.Debug => Microsoft.Extensions.Logging.LogLevel.Debug,
_ when LoggingLevel == LogLevel.Info => Microsoft.Extensions.Logging.LogLevel.Information,
_ when LoggingLevel == LogLevel.Warn => Microsoft.Extensions.Logging.LogLevel.Warning,
_ when LoggingLevel == LogLevel.Error => Microsoft.Extensions.Logging.LogLevel.Error,
_ when LoggingLevel == LogLevel.Fatal => Microsoft.Extensions.Logging.LogLevel.Critical,
_ when LogLevel == LogLevel.Trace => Microsoft.Extensions.Logging.LogLevel.Trace,
_ when LogLevel == LogLevel.Debug => Microsoft.Extensions.Logging.LogLevel.Debug,
_ when LogLevel == LogLevel.Info => Microsoft.Extensions.Logging.LogLevel.Information,
_ when LogLevel == LogLevel.Warn => Microsoft.Extensions.Logging.LogLevel.Warning,
_ when LogLevel == LogLevel.Error => Microsoft.Extensions.Logging.LogLevel.Error,
_ when LogLevel == LogLevel.Fatal => Microsoft.Extensions.Logging.LogLevel.Critical,
_ => Microsoft.Extensions.Logging.LogLevel.None
};

Expand Down

0 comments on commit 2359609

Please sign in to comment.