Serilog sql server接收器未写入消息



-=-=-=最新更新

在我的catch块中,我在Quick Watch中提到了异常变量,深入查看内部异常显示了以下错误:

Unable to load DLL 'Microsoft.Data.SqlClient.SNI.x86.dll': The specified module could not be found. (Exception from HRESULT: 0x8007007E)

问题是,在我的bin\debug目录中,该文件就在那里!!!为什么找不到呢?我试过了,但没能直接引用它。

-=-=-=更新

下面的一个建议答案有一些链接,我重新检查了一下。我挑选了一些有用的代码,比如将日志对象分配给静态记录器,然后调用CloseAndFlush。

这让我看到了微软。数据执行CloseAndFlush调用时出现SqlClient.dll错误。我使用NuGet来更新SQLClient,但仍然会出现以下错误:

Exception thrown: 'System.DllNotFoundException' in Microsoft.Data.SqlClient.dll
Exception thrown: 'System.TypeInitializationException' in Microsoft.Data.SqlClient.dll

我现在正在调查那些SQL。客户端错误。

-=-=-=-=-=

使用Asp。NET,而不是核心。试图让一个基本的sql服务器接收器工作,但运气不佳。问题一定很简单,但我看不出来。

下面是要写入的表,它已经存在。使用seriuser帐户,我可以通过SSMS进行连接,并执行所有CRUD操作。我还编写了一个方法,该方法使用连接到数据库的SQL数据对象,并且我也可以用这种方式对其执行所有CRUD操作。但是对于Serilog,log语句不记录任何内容。我会错过什么?数据库在我的机器上是本地的。断点显示有效的记录器对象。也尝试过在下沉选项中传递schemaname,但没有运气。并且没有错误,之前在记录器代码周围有一个try-catch块。

一个带有控制台应用程序和类库的解决方案。再简单不过了。

控制台应用程序在程序中有这个。cs:

class Program
{
static void Main(string[] args)
{
SLogger logger = new SLogger();        
}
}

类文件和sql表:

public class SLogger
{  
public SLogger()
{
var columnOption = new ColumnOptions();
columnOption.Store.Remove(StandardColumn.MessageTemplate);
ILogger log = new LoggerConfiguration()
.MinimumLevel.Verbose()
.WriteTo.MSSqlServer(@"Data Source=LW39QA;Initial Catalog=DEV;user id=seriuser;Password=SERIUSER1;",
sinkOptions: new MSSqlServerSinkOptions { TableName = "Logs" },
columnOptions: columnOption)
.CreateLogger();
log.Information("Logger created.");  
.....
.....              
CREATE TABLE [dbo].[Logs](
[Id] [int] IDENTITY(1,1) NOT NULL,
[Message] [nvarchar](max) NULL,
[MessageTemplate] [nvarchar](max) NULL,
[Level] [nvarchar](128) NULL,
[TimeStamp] [datetime] NOT NULL,
[Exception] [nvarchar](max) NULL,
[Properties] [nvarchar](max) NULL,
CONSTRAINT [PK_Logs] PRIMARY KEY CLUSTERED 
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

在上次更新中提到,我收到了这个错误,我认为这是我的问题的根本原因:

Unable to load DLL 'Microsoft.Data.SqlClient.SNI.x86.dll': The specified module could not be found. (Exception from HRESULT: 0x8007007E)

还有我的困惑,因为上述文件在类库目录中。

正如我还提到的,我的解决方案中有两个项目:类库和测试控制台应用程序。原来dll需要在控制台应用程序的bin目录中!!特别是在我必须创建的x86目录中。

一旦我把文件放在那里,问题就解决了。感谢所有提供帮助的人!

这是一个非常常见的问题。SO上有很多答案:

  • Serilog MSSqlServer接收器未写入表
  • Serilog ms-sql接收器未写入我的表

最新更新