c# - 使用 SeriLog 的 Windows 服务 没有日志保存到 MS SQL Server
问题描述
我创建了一个 .net 框架 windows 服务应用程序,它应该使用 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.Information("Started Grabbing Data");
}
现在有没有人看到任何会阻止日志记录发生的事情?
编辑
我在控制台应用程序中使用了这个确切的代码,它正在写入 SQL Server,但是当我发布我的 Windows 服务应用程序并将它作为服务运行时,没有记录任何日志。
解决方案
在解决 Serilog 问题时,您应该做的第一件事是启用SelfLog,以查看是否有任何异常被抛出。例如,如果接收器无法连接到 SQL Server,或者表有问题,您将在SelfLog中收到错误消息。
Serilog.Sinks.MSSqlServer
是“定期批处理接收器”,因此不会立即将日志写入数据库。您可能想要调整与消息批处理相关的配置选项。还记得在服务停止时刷新日志,否则您可能会丢失消息。请参阅记录器的生命周期。
您可以采取许多步骤来解决 SQL Server 接收器不工作的原因。下面的答案中描述了常见的:
推荐阅读
- python - 在 Python 中按类别分组并设置阈值
- rasa-nlu - InvalidPolicyConfig:无法加载策略“KerasPolicy”的模块。请确保名称是有效的政策
- android - 如何在警报对话框Android中添加两个相邻的文本视图
- java - 在java中将完整的日期字符串转换为简单的字符串
- flutter - 如何在颤动中停止音频播放器插件的本地音乐?
- awk - 根据每一行的一列中的最小数字过滤文件
- sql-server - SQL Server 中的二进制类型
- javascript - 如何从 javascript 对象中删除 null、未定义的值
- python - 将行索引作为值的 Pandas 数据框到字典?
- angular - Angular 10 单元测试 PrimeNG p-dropdown 与 2-Way 数据绑定