Exemplo n.º 1
0
        public static void UseSerilog(this IWebHostBuilder webBuilder, Action <LoggerConfigurationOptions> config = default)
        {
            var loggerOptions = new LoggerConfigurationOptions();

            config?.Invoke(loggerOptions);

            if (loggerOptions.ClearProviders)
            {
                webBuilder.ConfigureLogging(logger => logger.ClearProviders());
            }

            webBuilder.UseSerilog((ctx, loggerConfiguration) =>
            {
                var options = ctx.Configuration.GetOptions <SerilogOptions>(loggerOptions.SectionName);

                Configure(options, loggerConfiguration, loggerOptions, ctx);
            }, writeToProviders: true);
        }
Exemplo n.º 2
0
        private static void Configure(SerilogOptions options, LoggerConfiguration config, LoggerConfigurationOptions configurationOptions, WebHostBuilderContext ctx)
        {
            if (configurationOptions.UseEnvironmentVariables)
            {
                options.ServiceName = TryGetEnvironmentVariable("SERVICE_POD_NAME");
                options.FilePath    = TryGetEnvironmentVariable("SERILOG_LOG_PATH");
            }
            else
            {
                ValidateOptions(new[] { options?.FilePath, options?.ServiceName });
            }

            config
            .MinimumLevel.Override("Microsoft.AspNetCore", configurationOptions.OverrideDefaultLevelLog)
            .MinimumLevel.Is(configurationOptions.MinimumLevelLog)
            .Enrich.WithProperty("ServiceId", options.ServiceName)
            .Enrich.WithProperty("Environment", ctx.HostingEnvironment.EnvironmentName)
            .Enrich.FromLogContext()
            .WriteTo.Console();

            if (!configurationOptions.WriteToFile)
            {
                return;
            }

            var fileLogName = $"{options.ServiceName}_.log";

            config.WriteTo.File(
                new JsonFormatter(renderMessage: false),
                Path.Combine(options.FilePath, fileLogName),
                rollingInterval: RollingInterval.Day,
                rollOnFileSizeLimit: true,
                retainedFileCountLimit: 5,
                fileSizeLimitBytes: 500_000_000,
                shared: true,
                flushToDiskInterval: TimeSpan.FromSeconds(1)
                );
        }