using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Abstractions;
using Microsoft.Extensions.Logging.Debug;

namespace LogStudy.WebApp
{
    public class Program
    {
        public static void Main(string[] args)
        {
           var host = CreateWebHostBuilder(args).Build();

           //启动检查:使用日志
           var logger = host.Services.GetRequiredService<ILogger<Program>>();
           logger.LogInformation("检查数据库连接");
           logger.LogDebug(new EventId(1000,"事件名"),"检查缓存{id}",222);
            //少提供一个参数
           logger.LogInformation("1001","检查MQ{id}{name}",3333);
           
           host.Run();
        }

        public static IWebHostBuilder CreateWebHostBuilder(string[] args)
        {
            var webBuilder = WebHost.CreateDefaultBuilder(args)
                //配置日志
                 .ConfigureLogging((hostbuildContext, logBuild) =>
                 {
                     //CreateDefaultBuilder 默认注册了日志组件:
                     //使用appsettings.环境变量.json 的Logging配置节
                     //默认添加了以下提供程序:Console、 Debug、EventSource
                     //详情可以查看源代码

                     //本方法ConfigureLogging,重新配置日志
                     //配置信息
                     var config = hostbuildContext.Configuration;
                     //环境变量
                     var ev = hostbuildContext.HostingEnvironment;
                     //注入服务
                     var service=logBuild.Services;

                     logBuild
                         //自定义配置信息
                         .AddConfiguration(config.GetSection("Logging"))
                         //添加Console提供程序
                         .AddConsole()
                         //添加Debug提供程序
                         .AddDebug()
                         //添加EventLog提供程序
                         .AddEventLog()
                         //添加EventSourceLogger提供程序:EWT
                         .AddEventSourceLogger()
                         //添加TraceSource提供程序
                         .AddTraceSource("NetCoreDemo")
                         //设置最小默认日志级别
                         .SetMinimumLevel(LogLevel.Information)
                         //添加筛选器:会覆盖上面配置信息
                         .AddFilter("System", LogLevel.Debug) //不指定提供程序,则应用与全部
                         .AddFilter<DebugLoggerProvider>("Microsoft", LogLevel.Trace);//只作用于指定的提供程序 DebugLoggerProvider

                     //以下方式,可以使用第三方日志组件,如Nlog、Log4net等
                     //.ClearProviders()
                     //.AddProvider(null)

                 })
                 .UseStartup<Startup>();

            return webBuilder;
        }
           
    }
}