Serilog SQL Server - ничего не записывается в журнал при выпуске, отлично работает в разработке - PullRequest
0 голосов
/ 20 июня 2019

Я новичок в Serilog и пытаюсь настроить ведение журнала на SQL Server.Мой Program.cs выглядит следующим образом ...

using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Hosting;
using Serilog;

namespace MyWeb {
  public class Program {
    public static void Main(string[] args) =>
      CreateWebHostBuilder(args).Build().Run();

    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
      WebHost.CreateDefaultBuilder(args)
        .UseSerilog((context, config) => {
          config.ReadFrom.Configuration(context.Configuration);
        })
        .UseStartup<Startup>();
  }
}

... и раздел Serilog в appSettings.json выглядит следующим образом ...

"Serilog": {
    "MinimumLevel": {
      "Default": "Information",
      "Override": {
        "Microsoft": "Error",
        "System": "Error"
      }
    },
    "WriteTo": [
      {
        "Name": "MSSqlServer",
        "Args": {
          "connectionString": "myconnstr",
          "tableName": "Logs"
        }
      }
    ]
  },

Раздел в appSettings.Development.json выглядит следующим образом ...

  "Serilog": {
    "MinimumLevel": {
      "Default": "Debug",
      "Override": {
        "Microsoft": "Fatal",
        "System": "Fatal"
      }
    },
    "WriteTo": [
      {
        "Name": "Debug"
      },
      {
        "Name": "MSSqlServer",
        "Args": {
          "connectionString": "Data Source=.;Initial Catalog=MyWebDb;Trusted_Connection=True;MultipleActiveResultSets=true",
          "tableName": "Logs"
        }
      }
    ]
  }

Я вручную создал таблицу Logs с этим SQL ...

CREATE TABLE [Logs] (
   [Id] int IDENTITY(1,1) NOT NULL,
   [Message] nvarchar(max) NULL,
   [MessageTemplate] nvarchar(max) NULL,
   [Level] nvarchar(128) NULL,
   [TimeStamp] datetimeoffset(7) NOT NULL,  
   [Exception] nvarchar(max) NULL,
   [Properties] xml NULL,
   [LogEvent] nvarchar(max) NULL
   CONSTRAINT [PK_Log] PRIMARY KEY CLUSTERED ([Id] ASC) 
) 

Когда я запускаю веб-сайт в VS сПриведенные выше настройки, логирование работает отлично.Если я изменяю строку подключения в appSettings.Development.json на строку производственного подключения, а затем запускаюсь в VS, все работает нормально, исключений нет, но ничего не записывается в таблицу журналов производственной базы данных.

Я попытался скопировать код из этого SO-ответа и попробовал совет в этого SO-ответа , но результат всегда был одинаковым.Когда я использую локальную строку подключения, она работает нормально, если я использую рабочую строку, ничего не регистрируется.

Я использую ту же строку подключения для Serilog, что и для остальной части сайта, и вседругой доступ к базе данных работает нормально, так что это не похоже на проблему с разрешениями.

Кто-нибудь есть идеи, что я делаю неправильно?Спасибо

Я использую версии ASP.NET Core 2.2 и Serilog следующим образом ...

  • Serilog.AspNetCore Версия 2.1.1
  • Serilog.Settings.Версия конфигурации 3.1.0
  • Serilog.Sinks.File Версия 4.0.0
  • Serilog.Sinks.MSSqlServer Версия 5.1.2

Ответы [ 2 ]

1 голос
/ 25 июня 2019

Убедитесь, что вы используете схему [dbo] в вашей базе данных.Если у вас другая схема, обновите свою конфигурацию следующим образом:

"Name": "MSSqlServer",
"Args": {
      "connectionString": "Your connection string",
      "schemaName": "your schema name",
      "tableName": "Logs"
 }
1 голос
/ 20 июня 2019

Проверьте разрешения на рабочем сервере и убедитесь, что у подключенного пользователя есть необходимые разрешения.

Кроме того, Serilog не сообщает о проблемах журналирования по умолчанию.Добавьте SelfLog.Enable(), если хотите включить диагностику.

Serilog.Debugging.SelfLog.Enable(msg => Debug.WriteLine(msg));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...