Serilog SQL Server接收器日志记录未记录任何错误 [英] No errors logged for Serilog SQL server sink logging

查看:91
本文介绍了Serilog SQL Server接收器日志记录未记录任何错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已基于为我的ASP.Net Core 2.2 Web应用程序配置了Serilog SQL服务器接收器.文档.既不会创建日志"表,也不会记录任何错误.我想念什么?

I have configured Serilog SQL server sink for my ASP.Net Core 2.2 web application based on the documentation. Neither the Logs table get created nor are any errors logged. What am I missing?

AppSettings.Development.json:

{
  "ConnectionStrings": {
    "SQLServerConnectionString": "<ActualDataBaseConnectionString>"
  },
  "Serilog": {
    "Using": [ "Serilog.Sinks.MSSqlServer" ],
    "MinimumLevel": "Information",
    "WriteTo": [
      {
        "Name": "MSSqlServer",
        "Args": {
          "connectionString": "SQLServerConnectionString",
          "tableName": "Logs",
          "autoCreateSqlTable": true 
        }
      }
    ]
  }
}

Program.cs:

public class Program
  {
    private static string _environmentName;

    public static void Main(string[] args)
    {
      try
      {
        var iWebHost = CreateWebHostBuilder(args).Build();
        var path = Directory.GetCurrentDirectory();
        var configuration = new ConfigurationBuilder()
          .SetBasePath(path)
          .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
          .AddJsonFile($"appsettings.{_environmentName}.json", optional: false, reloadOnChange: true)
        .Build();

     var serilog = new Serilog();
        configuration.GetSection("Serilog").Bind(serilog);

        var logger = new LoggerConfiguration()
          .WriteTo.MSSqlServer(serilog.WriteTo[0].Args.connectionString, serilog.WriteTo[0].Args.tableName)
          .ReadFrom.AppSettings()
          .CreateLogger();

        Log.Logger = logger;
        Log.Information("Application starting");
        iWebHost.Run();
      }
      catch(Exception exception)
      {
        Log.Error(exception.ToString());
      }
      finally
      {
        Log.CloseAndFlush();
      }
    }

  public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
        WebHost.CreateDefaultBuilder(args)        
        .ConfigureLogging((webHostBuilderContext, iLoggingBuilder) =>
        {
          iLoggingBuilder.AddSerilog();
          _environmentName = webHostBuilderContext.HostingEnvironment.EnvironmentName;
        })
        .UseStartup<Startup>();
  }

  public class Args
  {
    public string connectionString { get; set; }
    public string tableName { get; set; }
    public bool autoCreateSqlTable { get; set; }
  }

  public class WriteTo
  {
    public string Name { get; set; }
    public Args Args { get; set; }
  }

  public class Serilog
  {
    public List<string> Using { get; set; }
    public string MinimumLevel { get; set; }
    public List<WriteTo> WriteTo { get; set; }
  }

推荐答案

最后,它是非常直截了当的.我的Program.cs文件中不需要更改,只需配置AppSettings.json.

In the end it was pretty straight foward. No changes were needed in my Program.cs file, I just had to configure the AppSettings.json.

Program.cs:

public static void Main(string[] args)
    {
      try
      {
        var iWebHost = CreateWebHostBuilder(args).Build();
        var path = Directory.GetCurrentDirectory();
        var configuration = new ConfigurationBuilder()
          .SetBasePath(path)
          .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
          .AddJsonFile($"appsettings.{_environmentName}.json", optional: false, reloadOnChange: true)
        .Build();

        var logger = new LoggerConfiguration()
          .Enrich.FromLogContext()
          .ReadFrom.Configuration(configuration)
          .CreateLogger();

        Log.Logger = logger;
        Log.Information("Application starting");
        iWebHost.Run();
      }
      catch(Exception exception)
      {
        Log.Error(exception.ToString());
      }
      finally
      {
        Log.CloseAndFlush();
      }
    }

AppSettings.development.json:

{
  "Serilog": {
    "Using": [ "Serilog.Sinks.MSSqlServer" ],
    "MinimumLevel": "Information",
    "WriteTo": [
      {
        "Name": "MSSqlServer",
        "Args": {
          "connectionString": "<DatabaseConnectionString>",
          "tableName": "Logs",
          "autoCreateSqlTable": true 
        }
      }
    ]
  }
}

这篇关于Serilog SQL Server接收器日志记录未记录任何错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆