You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
iot/projects/Infrastructure/Web/Hosting/IWebHostBuilderExtensions.cs

91 lines
4.0 KiB

using Infrastructure.Configuration;
using Infrastructure.Extensions;
using Microsoft.AspNetCore.Hosting;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using Serilog;
using Serilog.Formatting.Json;
using Serilog.Sinks.Elasticsearch;
using Serilog.Sinks.RollingFile;
using System;
using System.Collections.Generic;
using System.IO;
namespace Infrastructure.Web.Hosting
{
public static class IWebHostBuilderExtensions
{
public static IWebHostBuilder Config<TStartup>(this IWebHostBuilder hostBuilder, List<EFConfigurationValue> configValues = null, bool useLogServer = false, bool useConfigServer = false) where TStartup : class
{
try
{
var configuration = new ConfigurationBuilder().Config(configValues).Build();
if (useLogServer)
{
Log.Logger = new LoggerConfiguration()
.WriteTo.Elasticsearch(new ElasticsearchSinkOptions(new Uri("http://localhost:9200"))
{//http://localhost:9200/_search?size=100
TypeName = "_doc",
AutoRegisterTemplate = true,
AutoRegisterTemplateVersion = AutoRegisterTemplateVersion.ESv7,
FailureCallback = e => Console.WriteLine("Unable to submit event " + e.MessageTemplate),
EmitEventFailure = EmitEventFailureHandling.WriteToSelfLog |
EmitEventFailureHandling.WriteToFailureSink |
EmitEventFailureHandling.RaiseCallback,
FailureSink = new RollingFileSink("logs/log.txt", new JsonFormatter(), fileSizeLimitBytes: 100 * 1024 * 1024, 1)
})
.CreateLogger();
}
else
{
Log.Logger = new LoggerConfiguration()
.ReadFrom.Configuration(configuration)
.WriteTo.Console()
.WriteTo.File("logs/log.txt", rollOnFileSizeLimit: true, fileSizeLimitBytes: 100 * 1024 * 1024, rollingInterval: RollingInterval.Infinite)
.CreateLogger();
}
hostBuilder
.UseSerilog()
.ConfigureAppConfiguration((hostingContext, builder) =>
{
if (useConfigServer)
{
//builder.AddNacosConfiguration(x =>
//{
// x.DataId = "msconfigapp";
// x.Group = "";
// x.Tenant = "f47e0ae1-982a-4a64-aea3-52506492a3d4";
// x.Optional = false;
// x.ServerAddresses = new List<string> { "localhost:8848" };
//});
}
else
{
builder.Config(configValues);
}
})
.UseStartup<TStartup>()
.Build()
.Run();
}
catch (Exception ex)
{
ex.PrintStack();
Log.Fatal(ex.Message);
}
finally
{
Log.CloseAndFlush();
}
return hostBuilder;
}
public static IConfigurationBuilder Config(this IConfigurationBuilder builder, List<EFConfigurationValue> configValues)
{
return builder.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddEFConfiguration(options => options.UseSqlite("Data Source=configuration.db"), configValues ?? new List<EFConfigurationValue>())
.AddEnvironmentVariables();
}
}
}