c# - Serilog MSSqlServer 接收器是否应该与 Azure SQL Server 一起使用?

标签 c# azure-sql-database serilog asp.net-core-2.1

我有一个 ASP.Net Core 2.1 Web API,它可以毫无问题地连接到 Azure SQL Server 作为后备数据存储。

我目前正在尝试设置 Serilog,以便它将错误写入我的 Azure SQL Server 数据库中的“ApiLog”表。我正在使用MSSqlServer sink for Serilog并遵循此 blog 中描述的设置。我在 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

我在 API 的数据库上下文类中连接到 Azure SQL Server(相同的服务器和数据库,但不同的数据库表)时没有任何问题,因此我不确定问题是什么。我对数据库上下文连接使用与 Serilog 相同的 SQL 登录帐户。

这是我在 appsettings.json 中的 writeto 部分;

"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"
    }
  },

我什至尝试将用户 ID 和用户密码设置为 SA 登录名作为测试,但得到了相同的错误,因此我认为这可能不是 SQL Server 权限问题。

所以,我想知道...Azure SQL Server 实际上支持 Serilog MSSqlServer 接收器吗?到目前为止,我还没有在互联网上找到任何具体的说法。

有什么想法吗?

最佳答案

我刚刚在本地控制台应用程序中使用文档作为指南进行了尝试,效果很好。

// 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

这是表中的行:

Id 消息 MessageTemplate 级别时间戳异常属性

1 它有效它有效错误2018-09-28 17:11:04.1189594 +01:00 NULL

关于c# - Serilog MSSqlServer 接收器是否应该与 Azure SQL Server 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52558848/

相关文章:

c# - 如何从泛型中获取 bool 值作为返回对象

sql-server - Azure 数据库名称长度

mysql - 使用powershell执行mysqldump

Serilog:如何只在文件开头写文件头?

c# - 如何在深度调用中使用 serilog 跟踪请求

c# - 为什么这个程序会挂起?

c# - 将 double 格式化为纬度/经度人类可读格式

Azure 时间点还原 - 用于检查进度的查询

c# - Serilog 在 2 KB 后创建一个新文件

c# - MS Outlook 2013 删除通过 Exchange Web 服务 API 添加到 MasterCategoryList 的自定义类别