我有一个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(相同的服务器和数据库,但不同的数据库表)时,我没有任何问题,所以我不确定是什么问题。我为数据库上下文连接使用的SQL登录帐户与为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接收器?到目前为止,我还无法在互联网上找到任何一种可以说是另一种方式的具体信息。
有什么想法吗?
答案 0 :(得分:2)
我只是在本地控制台应用程序中以文档为指南进行了尝试,并且效果很好。
// 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 <属性/>