为什么不使用WriteTo.MSSqlServer接收器将Serilog记录到表中?

时间:2018-09-24 19:54:58

标签: .net sql-server serilog

我是Serilog的新手,我编写了一个小型测试.NET Core应用程序,该应用程序尝试将日志写入本地SQL Server数据库。下面的代码成功创建了该表,但是无论如何我都无法使其写入日志记录。我没有看到任何错误提示存在权限问题。有人有主意吗?

using Serilog;
using Serilog.Sinks.MSSqlServer;

namespace SerilogTest
{
    class Program
    {


        private static ILogger InitSqlLogger()
        {
            var columnOptions = new ColumnOptions();
            columnOptions.Store.Remove(StandardColumn.MessageTemplate);
            columnOptions.Store.Remove(StandardColumn.Properties);
            columnOptions.Store.Remove(StandardColumn.Exception);
            columnOptions.Store.Remove(StandardColumn.Level);
            columnOptions.Store.Remove(StandardColumn.TimeStamp);
            return new LoggerConfiguration()
                .WriteTo.MSSqlServer(@"Server=(local);Database=LogEvents; Integrated Security = SSPI;", "Logs", autoCreateSqlTable: true, columnOptions: columnOptions)
                .CreateLogger();
        }
        private static void WriteLog()
        {
            var msg = "This is a {message:l}";
            Log.Logger.Information(msg, "test");
        }
        static void Main(string[] args)
        {
            Log.Logger = InitSqlLogger();
            WriteLog();
        }
    }
}

1 个答案:

答案 0 :(得分:1)

很可能在写入SQL Server表时遇到权限问题。

默认情况下,用于日志记录的Serilog接收器是安全的,并且不会引发异常,因此,如果要对正在发生的问题进行故障排除,则应查看Serilog's SelfLog

例如

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