NetworkResurrector.Agent refactoring
parent
25f15c1de1
commit
15241429fc
|
@ -0,0 +1,8 @@
|
|||
namespace NetworkResurrector.Agent.Extensions
|
||||
{
|
||||
internal static class DataTypeExtensions
|
||||
{
|
||||
public static string Nullify(this string value)
|
||||
=> string.IsNullOrWhiteSpace(value) ? null : value;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,41 @@
|
|||
using Microsoft.Extensions.Configuration;
|
||||
using Serilog;
|
||||
using Serilog.Configuration;
|
||||
using Serilog.Sinks.MSSqlServer;
|
||||
using System;
|
||||
|
||||
namespace NetworkResurrector.Agent.Extensions
|
||||
{
|
||||
internal static class LoggingExtensions
|
||||
{
|
||||
internal static LoggerSinkConfiguration ConfiguredDestinations(this LoggerSinkConfiguration writeTo, IConfiguration configuration)
|
||||
{
|
||||
var sqlServerEnabled = configuration.GetValue<bool>("Logs:SqlServer:Enabled");
|
||||
var sqlServerConnection = configuration.GetValue<string>("Logs:SqlServer:Connection");
|
||||
var seqEnabled = configuration.GetValue<bool>("Logs:Seq:Enabled");
|
||||
var seqUrl = configuration.GetValue<string>("Logs:Seq:Url");
|
||||
var seqApiKey = configuration.GetValue<string>("Logs:Seq:ApiKey");
|
||||
|
||||
if (sqlServerEnabled && string.IsNullOrWhiteSpace(sqlServerConnection))
|
||||
throw new Exception("If SqlServer logging is enabled, the SqlServer connection must be configured.");
|
||||
if (seqEnabled && string.IsNullOrWhiteSpace(seqUrl))
|
||||
throw new Exception("If Seq logging is enabled, the Seq URL must be configured.");
|
||||
|
||||
if (sqlServerEnabled)
|
||||
{
|
||||
var columnOptions = new ColumnOptions();
|
||||
columnOptions.Store.Remove(StandardColumn.Properties);
|
||||
columnOptions.Store.Remove(StandardColumn.MessageTemplate);
|
||||
columnOptions.Store.Add(StandardColumn.LogEvent);
|
||||
var mssqlSinkOptions = new MSSqlServerSinkOptions() { AutoCreateSqlTable = true, TableName = "__Logs_Agent" };
|
||||
|
||||
writeTo.MSSqlServer(sqlServerConnection, mssqlSinkOptions, columnOptions: columnOptions);
|
||||
}
|
||||
|
||||
if (seqEnabled)
|
||||
writeTo.Seq(seqUrl, apiKey: seqApiKey.Nullify());
|
||||
|
||||
return writeTo;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -15,6 +15,7 @@
|
|||
<PackageReference Include="Serilog.AspNetCore" Version="$(SerilogPackageVersion)" />
|
||||
<PackageReference Include="Serilog.Extensions.Logging" Version="$(SerilogExtensionsPackageVersion)" />
|
||||
<PackageReference Include="Serilog.Sinks.MSSqlServer" Version="$(SerilogSinksMSSqlServerPackageVersion)" />
|
||||
<PackageReference Include="Serilog.Sinks.Seq" Version="$(SerilogSinksSeqPackageVersion)" />
|
||||
<PackageReference Include="AutoMapper.Extensions.Microsoft.DependencyInjection" Version="$(AutoMapperExtensionsPackageVersion)" />
|
||||
<PackageReference Include="MediatR.Extensions.Microsoft.DependencyInjection" Version="$(MediatRPackageVersion)" />
|
||||
<PackageReference Include="Microsoft.Extensions.Hosting.WindowsServices" Version="$(MicrosoftExtensionsHostingPackageVersion)" />
|
||||
|
|
|
@ -5,9 +5,6 @@ using Microsoft.Extensions.Hosting;
|
|||
using NetworkResurrector.Agent.Extensions;
|
||||
using NetworkResurrector.Agent.Extensions.Serilog;
|
||||
using Serilog;
|
||||
using Serilog.Core;
|
||||
using Serilog.Events;
|
||||
using Serilog.Sinks.MSSqlServer;
|
||||
using System;
|
||||
|
||||
namespace NetworkResurrector.Agent
|
||||
|
@ -20,28 +17,12 @@ namespace NetworkResurrector.Agent
|
|||
|
||||
builder.Host.UseSerilog((_, lc) =>
|
||||
{
|
||||
var connectionString = builder.Configuration.GetConnectionString("DatabaseConnection");
|
||||
var loggingLevelParam = builder.Configuration.GetValue<string>("Logging:LogLevel:Default");
|
||||
|
||||
var loggingLevelOk = Enum.TryParse(loggingLevelParam, out LogEventLevel loggingLevel);
|
||||
if (!loggingLevelOk)
|
||||
throw new Exception($"Logging level '{loggingLevelParam}' is not valid.");
|
||||
|
||||
var loggingLevelSwitch = new LoggingLevelSwitch(loggingLevel);
|
||||
|
||||
var columnOptions = new ColumnOptions();
|
||||
columnOptions.Store.Remove(StandardColumn.Properties);
|
||||
columnOptions.Store.Remove(StandardColumn.MessageTemplate);
|
||||
columnOptions.Store.Add(StandardColumn.LogEvent);
|
||||
var mssqlSinkOptions = new MSSqlServerSinkOptions() { AutoCreateSqlTable = true, TableName = "__Logs_Agent" };
|
||||
|
||||
lc
|
||||
.MinimumLevel.ControlledBy(loggingLevelSwitch)
|
||||
.MinimumLevel.Override("Microsoft", LogEventLevel.Warning)
|
||||
.ReadFrom.Configuration(builder.Configuration)
|
||||
.Enrich.FromLogContext()
|
||||
.Enrich.With(new AgentCodeEventEnricher(builder.Configuration))
|
||||
.WriteTo.Console()
|
||||
.WriteTo.MSSqlServer(connectionString, mssqlSinkOptions, columnOptions: columnOptions);
|
||||
.WriteTo.ConfiguredDestinations(builder.Configuration);
|
||||
});
|
||||
|
||||
builder.Services.ConfigureServices(builder.Configuration);
|
||||
|
|
|
@ -6,11 +6,23 @@
|
|||
"Host": {
|
||||
"UseWindowsService": true
|
||||
},
|
||||
"Logging": {
|
||||
"LogLevel": {
|
||||
"Default": "Debug",
|
||||
"Microsoft": "Warning",
|
||||
"Microsoft.Hosting.Lifetime": "Information"
|
||||
"Serilog": {
|
||||
"MinimumLevel": {
|
||||
"Default": "Information",
|
||||
"Override": {
|
||||
"Microsoft": "Information"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Logs": {
|
||||
"SqlServer": {
|
||||
"Enabled": false,
|
||||
"Connection": "Server=#########;Database=#########;User Id=#########;Password=#########;MultipleActiveResultSets=true"
|
||||
},
|
||||
"Seq": {
|
||||
"Enabled": false,
|
||||
"Url": "",
|
||||
"ApiKey": ""
|
||||
}
|
||||
},
|
||||
"AllowedHosts": "*",
|
||||
|
@ -18,7 +30,7 @@
|
|||
"Code": "DEV_AGENT"
|
||||
},
|
||||
"IdentityServer": {
|
||||
"BaseAddress": "https://lab.code-rove.com/identity-server-api/"
|
||||
"BaseAddress": "http://<host>:<port>/api/"
|
||||
},
|
||||
"Restrictions": {
|
||||
"EnforceActionOwner": true
|
||||
|
|
Loading…
Reference in New Issue