【发布时间】:2021-05-12 19:23:21
【问题描述】:
-=-=-=-=最新更新
在我的 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 调用时,这向我显示了 Microsoft.Data.SqlClient.dll 错误。我使用 NuGet 更新 SQLClient,但仍然收到这些错误:
Exception thrown: 'System.DllNotFoundException' in Microsoft.Data.SqlClient.dll
Exception thrown: 'System.TypeInitializationException' in Microsoft.Data.SqlClient.dll
我现在正在调查那些 SQL.Client 错误。
-=-=-=-=-=-=
使用 Asp.NET,而不是核心。试图让一个基本的 sql server sink 工作,但没有运气。一定是很简单的问题,但我看不到。
下面是要写入的表,它已经存在。使用 seriuser 帐户,我可以通过 SSMS 连接,并执行所有 CRUD 操作。我还编写了一个使用连接到数据库的 SQL 数据对象的方法,我也可以通过这种方式对其执行所有 CRUD 操作。但是使用 Serilog,日志语句不会记录任何内容。我会错过什么?数据库在我的机器上是本地的。断点显示一个有效的记录器对象。也通过在 sinkoptions 中传递 schemaname 来尝试它,但没有运气。并且没有错误,之前在记录器代码周围有一个 try catch 块。
带有控制台应用程序和类库的解决方案。没有比这更简单的了。
控制台应用程序在 program.cs 中有这个:
class Program
{
static void Main(string[] args)
{
SLogger logger = new SLogger();
}
}
class文件和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=LW39\QA;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
【问题讨论】:
-
如果在记录过程中出现问题,通常日志方法不会冒泡异常。大多数时候,您不希望日志记录问题破坏您的应用程序。相反,他们写入自我日志。 documentation describes how to enable the self log。我建议您检查一下并报告。
标签: serilog