C# Serilog SQL日志在发布时不起作用

C# Serilog SQL日志在发布时不起作用,c#,.net,sql-server,serilog,C#,.net,Sql Server,Serilog,有人知道为什么Serilog(sqlsink)在发布时会失败,但在开发中可以工作吗 在我的.NET4.7应用程序中,我想包括使用Serilog记录SQL数据库。在过去,只有文件日志记录可以很好地工作 在development中,我开始在启动文件中添加以下代码。当我在debug中运行这个程序时,一切正常,记录都添加到SQL表中 Serilog版本:Serilog 2.9.0、Serilog.Sinks.MSSqlServer 5.1.3 ColumnOptions option = new Co

有人知道为什么Serilog(sqlsink)在发布时会失败,但在开发中可以工作吗

在我的.NET4.7应用程序中,我想包括使用Serilog记录SQL数据库。在过去,只有文件日志记录可以很好地工作

在development中,我开始在启动文件中添加以下代码。当我在debug中运行这个程序时,一切正常,记录都添加到SQL表中

Serilog版本:Serilog 2.9.0、Serilog.Sinks.MSSqlServer 5.1.3

 ColumnOptions option = new ColumnOptions
        {
            DisableTriggers = true,
            AdditionalColumns = new List<SqlColumn>() { new SqlColumn() { ColumnName = "TraceIdentifier", DataType = SqlDbType.VarChar, DataLength = 50 }, new SqlColumn() { ColumnName = "Action", DataType = SqlDbType.VarChar, DataLength = -1 }, new SqlColumn() { ColumnName = "AppName", DataType = SqlDbType.VarChar, DataLength = 50 }, new SqlColumn() { ColumnName = "UserName", DataType = SqlDbType.VarChar, DataLength = -1 } }
        };
        option.Store.Remove(StandardColumn.MessageTemplate);
        option.Store.Remove(StandardColumn.Properties);

        Log.Logger = new LoggerConfiguration()
            .Enrich.FromLogContext()
            .WriteTo.MSSqlServer(ConfigurationManager.AppSettings["SqlLogging"], "Logs",
                autoCreateSqlTable: true, batchPostingLimit: 1000, period: new TimeSpan(0, 0, 0, 0, 15), columnOptions: option)
            //.Enrich.WithProperty("AppName", "Catalogs")
            .WriteTo.File(@"D:\Apps\LogCatalog.txt")
            .CreateLogger();
columnpoptions=newcolumnpoptions
{
DisableTriggers=true,
AdditionalColumns=new List(){new SqlColumn(){ColumnName=“TraceIdentifier”,DataType=SqlDbType.VarChar,DataLength=50},new SqlColumn(){ColumnName=“Action”,DataType=SqlDbType.VarChar,DataType=SqlDbType.VarChar,DataType=SqlDbType.VarChar,DataLength=-1},new SqlColumn(){ColumnName=“用户名”,DataType=SqlDbType.VarChar,DataLength=-1}
};
option.Store.Remove(StandardColumn.MessageTemplate);
option.Store.Remove(StandardColumn.Properties);
Logger.Logger=新的LoggerConfiguration()
.Enrich.FromLogContext()的
.WriteTo.MSSqlServer(ConfigurationManager.AppSettings[“SqlLogging”],“Logs”,
autoCreateSqlTable:true,batchPostingLimit:1000,句点:新时间跨度(0,0,0,0,15),columnOptions:option)
//.Enrich.WithProperty(“AppName”、“目录”)
.WriteTo.File(@“D:\Apps\LogCatalog.txt”)
.CreateLogger();

一旦代码在IIS中发布和托管,它将返回运行时错误。当我删除WriteTo.MSSqlServer时,它工作正常。因此,调试之间没有任何变化,但一旦在服务器上发布,它就会失败。

服务器上的.NET版本似乎有问题。

您的问题是,您是否也在测试正在开发IIS。您也没有提到运行时错误的实际详细信息—错误是什么?IIS中运行的东西与您计算机上运行的东西之间的一个主要明显区别是,IIS应用程序池通常在专用或匿名凭据下运行,这些凭据需要被授予对任何数据的显式权限您要使用的数据库。特别是,向运行网站的帐户授予创建表的权限不是一件常见的事情。请查看失败的请求跟踪。检查项目的working bin文件夹中的dll文件。然后检查已发布的结果,以查看相同的dll是否位于同一文件夹和exe文件中。@Jeroemostert fromVS2017我正在IIS Express中运行。该错误仅为运行时错误(处理您的请求时发生异常。此外,在执行第一个异常的自定义错误页时发生另一个异常。请求已终止。)。从数据库访问SQL数据库不是问题server@jdweng这些文件都是相同的!发布时,DLL会在计算机上更新,以便与生成计算机兼容。因此,发布必须在管理模式下完成。文件系统对IIS的访问权限有限。因此,除非您给予许可,否则无法访问像D:这样的驱动器这是用户给予的默认权限。因此,我可能最好使用具有存储数据的完全权限的网络驱动器,而不是在IIS计算机上。