2016-12-22 12 views
16

Aby debugować aplikację core .net, która kończy się niepowodzeniem podczas uruchamiania, chciałbym napisać dzienniki z pliku startup.cs. Mam rejestrowanie instalacji w pliku, który może być używany w pozostałej części aplikacji poza plikiem startup.cs, ale nie wiem, jak pisać logi z samego pliku startup.cs.Jak pisać dzienniki z poziomu Startup.cs

Odpowiedz

12

Wariant 1: bezpośrednio korzystać dziennik (np Serilog) w startup-

public class Startup 
{ 
    public Startup(IHostingEnvironment env) 
    { 
     Log.Logger = new LoggerConfiguration() 
      .MinimumLevel.Debug() 
      .WriteTo.RollingFile(Path.Combine(env.ContentRootPath, "Serilog-{Date}.txt")) 
      .CreateLogger(); 

     Log.Information("Inside Startup ctor"); 
     .... 
    } 

    public void ConfigureServices(IServiceCollection services) 
    { 
     Log.Information("ConfigureServices"); 
     .... 
    } 

    public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) 
    { 
     Log.Information("Configure"); 
     .... 
    } 

wyjściowa:

serilog

Aby skonfigurować Serilog w aplikacji asp.net-core , sprawdź Serilog.AspNetCore package on GitHub.


Opcja 2: Konfigurowanie rejestrowania w Program.cs jak to- loggerFactory

var host = new WebHostBuilder() 
      .UseKestrel() 
      .ConfigureServices(s => { 
       s.AddSingleton<IFormatter, LowercaseFormatter>(); 
      }) 
      .ConfigureLogging(f => f.AddConsole(LogLevel.Debug)) 
      .UseStartup<Startup>() 
      .Build(); 

host.Run(); 

użytkownika przy starcie jak to-

public class Startup 
{ 
    ILogger _logger; 
    IFormatter _formatter; 
    public Startup(ILoggerFactory loggerFactory, IFormatter formatter) 
    { 
     _logger = loggerFactory.CreateLogger<Startup>(); 
     _formatter = formatter; 
    } 

    public void ConfigureServices(IServiceCollection services) 
    { 
     _logger.LogDebug($"Total Services Initially: {services.Count}"); 

     // register services 
     //services.AddSingleton<IFoo, Foo>(); 
    } 

    public void Configure(IApplicationBuilder app, IFormatter formatter) 
    { 
     // note: can request IFormatter here as well as via constructor 
     _logger.LogDebug("Configure() started..."); 
     app.Run(async (context) => await context.Response.WriteAsync(_formatter.Format("Hi!"))); 
     _logger.LogDebug("Configure() complete."); 
    } 
} 

pełne dane dostępne na tej link

0

Udało mi się to zrobić przez statyczne utworzenie programu rejestrującego z Nlog w pliku, a następnie użyj go w ramach metod uruchamiania.

private readonly NLog.Logger _logger = new NLog.LogFactory().GetCurrentClassLogger(); 
19

To zmieniło się niewiarygodnie z wersją ASP.NET Core 2.0. W programie ASP.NET Core 2.0 rejestrowanie jest tworzone w programie budującym hosta. Oznacza to, że rejestracja jest domyślnie dostępna przez DI i można ją wprowadzić do klasy Startup:

public class Startup 
{ 
    private readonly ILogger<Startup> _logger; 

    public IConfiguration Configuration { get; } 

    public Startup(ILogger<Startup> logger, IConfiguration configuration) 
    { 
     _logger = logger; 
     Configuration = configuration; 
    } 

    public void ConfigureServices(IServiceCollection services) 
    { 
     _logger.LogInformation("ConfigureServices called"); 

     // … 
    } 

    public void Configure(IApplicationBuilder app, IHostingEnvironment env) 
    { 
     _logger.LogInformation("Configure called"); 

     // … 
    } 
}