Использование NLog с Sql Server - PullRequest
0 голосов
/ 04 июля 2019

Я пытаюсь записывать ошибки в таблицу базы данных, используя NLog, но в базу данных не записывается никаких записей. Что мне здесь не хватает?

Startup.cs

public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;            
    }


    public void Configure(IApplicationBuilder app, IHostingEnvironment env, IHttpContextAccessor httpContextAccessor, 
        IOptions<MailSettings> mailConfig, IOptions<ApplicationSettings> applicationSettings, ILoggerFactory loggerFactory)
    {           

        app.UseMvc();

        GlobalDiagnosticsContext.Set("connectionString", ConnectionString.Connection);//Set the database connection string

        loggerFactory.AddNLog();
    }

}

Затем я создал следующую таблицу базы данных

      CREATE TABLE [dbo].[Log] (
      [Id] [int] IDENTITY(1,1) NOT NULL,
      [Application] [nvarchar](50) NOT NULL,
      [Logged] [datetime] NOT NULL,
      [Level] [nvarchar](50) NOT NULL,
      [Message] [nvarchar](max) NOT NULL,
      [Logger] [nvarchar](250) NULL,
      [Callsite] [nvarchar](max) NULL,
      [Exception] [nvarchar](max) NULL,
    CONSTRAINT [PK_dbo.Log] PRIMARY KEY CLUSTERED ([Id] ASC)
      WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
  ) ON [PRIMARY]

и пытается записать некоторые ошибки здесь.

public class ValuesController : ControllerBase
{
    private readonly ILogger _logger;

    public ValuesController(ILogger<ValuesController> logger)
    {
        _logger = logger;
    }

    // GET api/values
    [HttpGet]
    public async Task<ActionResult<IEnumerable<string>>> GetAsync()
    {
        _logger.LogError("just test");

    }
}

1 Ответ

0 голосов
/ 05 июля 2019

Вам необходимо использовать метод расширения AddNLog перед app.UserMVC:

public void Configure(IApplicationBuilder app, IHostingEnvironment env,IHttpContextAccessor httpContextAccessor, 
    IOptions<MailSettings> mailConfig, IOptions<ApplicationSettings> applicationSettings,ILoggerFactory loggerFactory)
{

   GlobalDiagnosticsContext.Set("connectionString", ConnectionString.Connection);
   loggerFactory.AddNLog();

   app.UseMvc();
}

И установить в Program.cs

public static class Program
{
    public static void Main(string[] args)
    {            
        GlobalDiagnosticsContext.Set("connectionString", YourConnectionString);

        var logger = NLog.Web.NLogBuilder.ConfigureNLog("nlog.config").GetCurrentClassLogger();
        try
        {
            //logger.Debug("init main");
            BuildWebHost(args).Run();
        }
        catch (Exception exception)
        {
            //NLog: catch setup errors
            //logger.Error(exception, "Stopped program because of exception");
            throw;
        }
        finally
        {
            // Ensure to flush and stop internal timers/threads before application-exit (Avoid segmentation fault on Linux)
            NLog.LogManager.Shutdown();
        }
    }

    public static IWebHost BuildWebHost(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>()
            .ConfigureLogging(logging =>
            {
                logging.ClearProviders();
                logging.SetMinimumLevel(Microsoft.Extensions.Logging.LogLevel.Trace);
            })
            .UseNLog()  // NLog: Setup NLog for Dependency injection
            .Build();
}

См. https://github.com/damienbod/AspNetCoreNlog

...