问题描述
我创建了一个.net Framework Windows Service应用程序,该应用程序应该使用serilog和MS sql Server记录消息和任何潜在的错误。我的问题是什么都没有记录到MS sql Server,所以我不确定是什么问题。
作为一个示例(我删除了我的敏感代码)-我在publice Service1()
方法中对SeriLog进行了初始化,然后我希望每5分钟运行一次进程,因此在OnStart()
中计时器设置,我使用此代码
public Service1()
{
InitializeComponent();
var log = new LoggerConfiguration()
.Writeto.MSsqlServer(
connectionString: "data source=ZZZZZZZZ;Initial Catalog=ZZ;Persist Security Info=False;User Id=ZZ; Password=ZZZ;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=True;",sinkOptions: new SinkOptions
{
TableName = "SeriLog",SchemaName = "dbo",autocreatesqlTable = false
})
.CreateLogger();
}
protected override void OnStart(string[] args)
{
timer.Elapsed += new ElapsedEventHandler(Onelapsedtime);
timer.Interval = 300000;
timer.Enabled = true;
}
private void Onelapsedtime(object source,ElapsedEventArgs e)
{
GetData().GetAwaiter().GetResult();
}
private static async Task GetData()
{
Log.@R_823_4045@ion("Started Grabbing Data");
}
现在有人能阻止日志记录发生了吗?
编辑
我已经在控制台应用程序中使用了此确切的代码,并且正在将其写入sql Server,但是当我发布Windows Service App并将其作为服务运行时,就不会记录任何日志。
解决方法
启用Serilog问题故障排除时,您应该做的第一件事就是启用SelfLog,以查看是否有任何异常被抛出。例如,如果接收器无法连接到SQL Server,或者表有问题,您将在SelfLog中收到错误消息。
Serilog.Sinks.MSSqlServer
是一个“定期批处理接收器”,因此日志不会立即写入数据库。您可能需要调整configuration options related to batching of messages。还请记住,服务停止时请刷新日志,否则您可能会丢失消息。参见Lifecycle of Loggers。
您可以采取许多步骤来解决SQL Server接收器无法正常工作的问题。下面的答案描述了常见的问题:
,
您正在初始化var log
,但要通过静态Log
类进行登录。要启用静态Log
类,您需要初始化Log.Logger
。