gpt4 book ai didi

c# - 设置 Serilog 以将日志写入 SQL Server 数据库表

转载 作者:太空狗 更新时间:2023-10-29 19:47:41 40 4
gpt4 key购买 nike

我正在尝试设置 Serilog 以将日志写入我的数据库表。

以下是我为尝试设置 SQL Server 日志记录所做的工作的细目。

1) 安装 Nuget 包、Serilog 和 Serilog.Sinks.MSSqlServer

2) 我设置了一个名为 Logger.cs 的类,其中包含 Serilog 的所有配置:

public static class Logger
{
private static readonly ILogger _Logger;

static Logger()
{

var connStr = "data source=DESKTOP-BLAH;Initial Catalog=DBNAME;Trusted_Connection=True;";

_Logger = new LoggerConfiguration()
.WriteTo.MSSqlServer(connStr, "ApplicationLogs",
columnOptions: GetSqlColumnOptions(), restrictedToMinimumLevel: LogEventLevel.Debug, batchPostingLimit: 1)
.CreateLogger();

Serilog.Debugging.SelfLog.Enable(msg => Debug.WriteLine(msg));

}

public static ColumnOptions GetSqlColumnOptions()
{
var colOptions = new ColumnOptions();

colOptions.Store.Remove(StandardColumn.Properties);
colOptions.Store.Remove(StandardColumn.MessageTemplate);
colOptions.Store.Remove(StandardColumn.Message);
colOptions.Store.Remove(StandardColumn.Exception);
colOptions.Store.Remove(StandardColumn.TimeStamp);
colOptions.Store.Remove(StandardColumn.Level);

colOptions.AdditionalDataColumns = new Collection<DataColumn>
{
new DataColumn{DataType = typeof(DateTime), ColumnName = "LogTimeStamp"},
new DataColumn{DataType = typeof(Int32), ColumnName = "RecordNum"},
new DataColumn{DataType = typeof(string), ColumnName = "ComputerName"},
new DataColumn{DataType = typeof(DateTime), ColumnName = "ProcessTimeStamp"},
new DataColumn{DataType = typeof(string), ColumnName = "LogGroup"},
new DataColumn{DataType = typeof(string), ColumnName = "Type"},
new DataColumn{DataType = typeof(Int32), ColumnName = "EventId"},
new DataColumn{DataType = typeof(string), ColumnName = "UserId"},
new DataColumn{DataType = typeof(Int32), ColumnName = "Line"},
new DataColumn{DataType = typeof(string), ColumnName = "Description"},
new DataColumn{DataType = typeof(string), ColumnName = "Source"},
new DataColumn{DataType = typeof(string), ColumnName = "Data"},
new DataColumn{DataType = typeof(DateTime), ColumnName = "AddTimestamp"},
new DataColumn{DataType = typeof(string), ColumnName = "DeviceID"}

};
return colOptions;
}


public static void WriteError(ApplicationLog infoToLog)
{
try
{
_Logger.Error(LogEventLevel.Error,
"{LogTimestamp}{RecordNum}{ComputerName}{ProcessTimeStamp}{LogGroup}" +
"{Type}{EventId}{UserId}{Line}" +
"{Description}{Source}{Data}{AddTimestamp}{DeviceID}",
infoToLog.LogTimestamp, infoToLog.RecordNum,
infoToLog.ComputerName, infoToLog.ProcessTimestamp,
infoToLog.LogGroup, infoToLog.Type,
infoToLog.EventId, infoToLog.UserId,
infoToLog.Line, infoToLog.Description,
infoToLog.Source, infoToLog.Data,
infoToLog.AddTimestamp, infoToLog.DeviceId);
}
catch(Exception ex)
{

}
}
}

3) 然后我相信我应该可以开始了,我这样设置:

ApplicationLog appLog = new ApplicationLog()
{
LogTimestamp = DateTime.Now,
RecordNum = 1,
ComputerName = Environment.MachineName,
ProcessTimestamp = DateTime.Now,
LogGroup = "10",
Type = "T",
EventId = 23,
UserId = Environment.UserName,
Line = 0,
Description = "Duplicate Failed to Upload",
Source = "FooController.cs",
Data = "DBNAME",
AddTimestamp = DateTime.Now,
DeviceId = "15"

};

Logger.WriteError(appLog);

4) 已经在我的数据库中创建了表,只是等待来自日志记录的数据进行填充。

但是,它似乎仍然没有保存在我的 SQL Server 数据库表中。

我想知道我是否遗漏了任何步骤或我在此处设置时做错了什么?

最佳答案

你能否尝试使用 serilog 的 self 记录来查看发生了什么:

如果您使用的是 .net core,请将以下内容放入 Program.main()

Serilog.Debugging.SelfLog.Enable(msg =>
{
Debug.Print(msg);
Debugger.Break();
});

关于c# - 设置 Serilog 以将日志写入 SQL Server 数据库表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46941413/

40 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com