May 28, 2019

RePost: Serilog with StructureMap - ASP.Net Core 2.1


https://andydote.co.uk/2017/07/28/serilog-context-with-structuremap-and-simpleinjector/

https://carlos.mendible.com/2019/01/14/updated-step-step-serilog-asp-net-core/

https://stackify.com/serilog-tutorial-net-logging/


Required NuGet:

Serilog.AspNetCore
Serilog.Extensions.Logging
Serilog.Sinks.File

Example of Program.cs

public class Program
    {
        public static void Main(string[] args)
        {
            Log.Logger = new LoggerConfiguration()
                            .Enrich.FromLogContext()
                            .MinimumLevel.Error()
                            .WriteTo.File("log.txt", rollingInterval: RollingInterval.Day,rollOnFileSizeLimit:true,fileSizeLimitBytes:10000000)
                            .CreateLogger();
            try
            {
                BuildWebHost(args).Run();
            }
            finally
            {
                Log.CloseAndFlush();
            }
        }
        public static IWebHost BuildWebHost(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                .UseSerilog()
                .UseStartup<Startup>()
                .Build();
    }

 Startup.cs:

public IServiceProvider ConfigureServices(IServiceCollection services)
        {
         
            ....
            return ConfigureIoc(services);
        }
public IServiceProvider ConfigureIoc(IServiceCollection services)
        {
            var container = new Container(config =>
            {
                config.Scan(_ =>
                {
                    _.AssemblyContainingType(typeof(Startup));
                    _.AssembliesAndExecutablesFromApplicationBaseDirectory();
                    _.WithDefaultConventions();
                });
                config.For<ILogger>().Use(context => Log.ForContext(context.ParentType));     
                config.Populate(services);
            });
            return container.GetInstance<IServiceProvider>();
        }

How to use:


private readonly ILogger<MyClass> _logger = null;     
        public MyClass(
            ILogger<MyClass> logger         
            )
        {
            _logger = logger;