【问题标题】:Serilog MSSqlServer sink not writing to tableSerilog MSSqlServer 接收器未写入表
【发布时间】:2016-06-15 23:06:48
【问题描述】:

我的 Startup.cs 中有以下语句:

Log.Logger = new LoggerConfiguration()
    .MinimumLevel.Debug()
    .WriteTo.ColoredConsole()
    .WriteTo.MSSqlServer("Server=(localdb)\\MSSQLLocalDB;Database=myDb.Logging;Trusted_Connection=True;", "Logs", autoCreateSqlTable: true)
    .WriteTo.RollingFile(pathFormat: Path.Combine(logPath, "Log-{Date}.txt"))
    .CreateLogger();

在我的配置方法中:

loggerFactory.AddSerilog();

当我启动应用程序时,会创建表,因此我知道连接有效。我将日志输出记录到控制台和文件,但是,没有输出到数据库表。

我做错了什么?

其他信息:使用asp.net core rc2-final,针对net461,使用Serilog.Sinks.MSSqlServer 4.0.0-beta-100

【问题讨论】:

    标签: asp.net-core serilog sink


    【解决方案1】:

    乍一看,您似乎并没有遗漏任何东西。尝试写入表时,SQL Server Sink 可能会引发异常。

    您是否尝试过检查Serilog's self log 的输出?

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

    更新: 看起来您的 SQL Server/Local DB 存在权限问题。此错误消息表明接收器正在尝试运行 ALTER TABLE 语句,而运行应用程序的用户无权执行 ALTER TABLE 语句。

    更新 2:我建议你使用完整的 .NET + Serilog v1.5.14 + Serilog.Sinks.MSSqlServer v3.0.98 编写一个简单的控制台应用程序,看看你是否得到相同的行为......只是为了排除这种可能性.NET Core 实现或您使用的 beta 接收器版本存在问题

    【讨论】:

    • 我现在就试试 - 好的,所以它说由于以下错误无法将 x 日志事件写入数据库:无法访问目标表“日志”
    • @CiaoProiete - 这是个好主意。我正在查看接收器的源,似乎在执行此行时引发了异常: await copy.WriteToServerAsync(_eventsTable, _token.Token).ConfigureAwait(false);我也可能会尝试将源代码包含在我的项目中并逐步检查以找出问题所在。
    • @CiaoProiete - 决定改用 MongoDb,这对于日志记录非常有效。感谢您的宝贵时间。
    • @CaioProiete 我有同样的问题,但使用的是 mongoDb。当使用登录名和密码指定连接字符串时,它不起作用
    • 更新:Serilog.Debbuging.SelfLog.Out 已被 Serilog.Debugging.SelfLog.Enable(msg => Debug.WriteLine(msg));参考:github.com/serilog/serilog/wiki/Debugging-and-Diagnostics
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多