Skip to content

ASP.NET Core 使用Serilog

Ni Yanwei edited this page Jun 21, 2018 · 3 revisions

安装Nuget包

Install-Package Serilog.AspNetCore -DependencyVersion Highest
Install-Package Serilog.Sinks.Console
Install-Package Serilog.Sinks.File
Install-Package Serilog.Sinks.ElasticSearch

修改programs.cs文件

public static void Main(string[] args) {
    Log.Logger = new LoggerConfiguration()
        .MinimumLevel.Debug()
        .MinimumLevel.Override("Microsoft", LogEventLevel.Information)
        .Enrich.FromLogContext()
        .WriteTo.Console()
        .WriteTo.File("logs\\log.txt", rollingInterval: RollingInterval.Day, rollOnFileSizeLimit: true)
        .WriteTo.Elasticsearch(new ElasticsearchSinkOptions(new Uri("http://localhost:9200")) {
            AutoRegisterTemplate = true,
            AutoRegisterTemplateVersion = AutoRegisterTemplateVersion.ESv6,
            FailureCallback = e => Console.WriteLine("Unable to submit event " + e.MessageTemplate),
            EmitEventFailure = EmitEventFailureHandling.WriteToSelfLog |
            EmitEventFailureHandling.WriteToFailureSink |
            EmitEventFailureHandling.RaiseCallback
        })
        .CreateLogger();

    try {
        Log.Information("Starting web host");
        BuildWebHost(args).Run();
    }
    catch (Exception ex) {
        Log.Fatal(ex, "Host terminated unexpectedly");
    }
    finally {
        Log.CloseAndFlush();
    }
}

public static IWebHost BuildWebHost(string[] args) =>
    WebHost.CreateDefaultBuilder(args)
    .ConfigureAppConfiguration(Startup.ConfigureAppConfiguration)
    .UseStartup<Startup>()
    .UseSerilog()
    .Build();
}

记录日志

public class ValuesController : Controller {
    private ILogger log = null;
    public ValuesController(ILogger<ValuesController> logger) {
        this.log = logger;
    }
    // GET api/values/5
    [HttpGet("{id}")]
    public VendorModel Get(int id) {
        var vendor = vendors.Where(v => v.Id == id).FirstOrDefault();
        log.LogInformation("Read {@Vendor}",vendor);
        return vendor;
    }
Clone this wiki locally