我正在尝试设置 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/