Предполагается, что приемник Serilog MSSqlServer будет работать с Azure SQL Server? - PullRequest
0 голосов
/ 28 сентября 2018

У меня есть веб-API ASP.Net Core 2.1, который без проблем подключается к Azure SQL Server для резервного хранилища данных.

В настоящее время я пытаюсь настроить Serilog, чтобы он записывал ошибки в таблицу «ApiLog» в моей базе данных Azure SQL Server.Я использую приемник MSSqlServer для Serilog и следую настройке, описанной в этом блоге .Я использую следующий код в моем Program.cs, чтобы увидеть любые ошибки Serilog:

        Serilog.Debugging.SelfLog.Enable(msg =>A
        {
            Debug.Print(msg);
            Debugger.Break();
        });

... и получаю эту ошибку;

Unable to write 1 log events to the database due to following error: A connection was successfully established with the server, but then an error occurred during the pre-login handshake. (provider: TCP Provider, error: 0 - An existing connection was forcibly closed by the remote host

У меня нет проблем с подключениемк серверу Azure SQL Server (тот же сервер и база данных, но разные таблицы базы данных) в классах контекста БД моего API, поэтому я не уверен, в чем проблема.Я использую ту же учетную запись SQL для подключения к контексту БД, что и для Serilog.

Вот мой раздел writeto в appsettings.json;

"WriteTo": [
  {
    "Name": "MSSqlServer",
    "Args": {
      "connectionString": "Server=<server name in Azure>.database.windows.net,1433;Initial Catalog=Logs;Persist Security Info=False;User ID=<SQL account name>;Password=<Sql Account Password>;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;",
      "tableName": "ApiLog"
    }
  },

Я даже попытался установитьИдентификатор пользователя и пароль пользователя для входа в систему SA в качестве теста и получили ту же ошибку, поэтому я не думаю, что это может быть проблема с разрешениями SQL Server.

Итак, мне интересно ... это приемник Serilog MSSqlServerна самом деле поддерживается с Azure SQL Server?До сих пор я не смог найти в интернете ничего конкретного, что бы так или иначе говорило.

Есть идеи?

1 Ответ

0 голосов
/ 28 сентября 2018

Я только что попробовал его в локальном консольном приложении, используя документацию в качестве руководства, и он работал нормально.

// This doesn't break/I don't get any exceptions.
Serilog.Debugging.SelfLog.Enable(msg =>
{
    Debug.Print(msg);
    Debugger.Break();
});

var tableName = "Logs";
var connectionString = "Server=SERVER;Database=DATABASE;User Id=USERNAME;Password=PASSWORD;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;Persist Security Info=False;";

var log = new LoggerConfiguration()
    .WriteTo.MSSqlServer(connectionString, tableName)
    .CreateLogger();

log.Write(Serilog.Events.LogEventLevel.Error, "It works");

Не было ошибок подключения.

Пример документации: https://github.com/serilog/serilog-sinks-mssqlserver#code-net-framework

Я сам создал таблицу, я не пробовал автоматическое создание: https://github.com/serilog/serilog-sinks-mssqlserver#table-definition

Вот строка в таблице:

Идентификатор сообщения MessageTemplate Level TimeStamp Exception Properties

1 Это работает Это работает Ошибка 2018-09-28 17: 11: 04.1189594 +01: 00 NULL

...