Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法使用Serilog在ASP.NET核心控制器中添加我的日志记录_C#_Azure Service Fabric_Serilog - Fatal编程技术网

C# 无法使用Serilog在ASP.NET核心控制器中添加我的日志记录

C# 无法使用Serilog在ASP.NET核心控制器中添加我的日志记录,c#,azure-service-fabric,serilog,C#,Azure Service Fabric,Serilog,我有一个使用ASPNET Core v2的控制器 protected override IEnumerable<ServiceInstanceListener> CreateServiceInstanceListeners() { return new ServiceInstanceListener[] { new ServiceInstanceListener(serviceContext =>

我有一个使用ASPNET Core v2的控制器

        protected override IEnumerable<ServiceInstanceListener> CreateServiceInstanceListeners()
    {
        return new ServiceInstanceListener[]
        {
            new ServiceInstanceListener(serviceContext =>
                new WebListenerCommunicationListener(serviceContext, "ServiceEndpoint", (url, listener) =>
                {
                    ServiceEventSource.Current.ServiceMessage(serviceContext, $"Starting WebListener on {url}");

                    return new WebHostBuilder().UseHttpSys()
                        .ConfigureServices(services => services.AddSingleton<StatelessServiceContext>(serviceContext))
                        .UseContentRoot(Directory.GetCurrentDirectory())
                        .UseStartup<Startup>()
                        .UseApplicationInsights()
                        .UseServiceFabricIntegration(listener, ServiceFabricIntegrationOptions.None)
                        .UseUrls(url)
                         .UseSerilog(_log, true)
                        .Build();
                }))
        };
    }
这真的很好,因为我有很多日志记录

然而,当我尝试使用标准登录时

Log.Information("MESSAGE");
这条路不通

有人知道这是什么原因吗

我使用AutoFac,它在我的容器中注册了一个记录器

            var assembly = Assembly.GetExecutingAssembly();
            var appName = assembly.GetName().Name;
            var appVersion = assembly.InformationalVersion();

            var logger = ApplicationLoggingHelper.ConfigureLogging(appName, appVersion);
            builder.Register(container => logger)
                .SingleInstance();

            ApplicationContainer = builder.Build();
我可以应用一种黑客技术,它只是在我的基本控制器中创建一个属性作为新日志,但这并不理想,我更希望知道是什么导致了这个问题


Paul

如果使用通过记录器静态实例的
Log.Information
。您是否设置过静态实例
Log.Logger=Logger
或类似的东西?感谢我将它添加到我的基本控制器时,它起了作用。我希望使用我已经在autofac容器中创建的实例,如上图所示,但至少这是可行的。我想这不是太多的开销。现在,我创建一个新的日志实例,并在我的控制器的构造函数中将log.Logger设置为该实例。如果这样做,则可以在任何地方更改静态记录器。这听起来不是个好主意。最好是传递logger实例,而不是破坏用于“正常”日志记录的主静态记录器
            var assembly = Assembly.GetExecutingAssembly();
            var appName = assembly.GetName().Name;
            var appVersion = assembly.InformationalVersion();

            var logger = ApplicationLoggingHelper.ConfigureLogging(appName, appVersion);
            builder.Register(container => logger)
                .SingleInstance();

            ApplicationContainer = builder.Build();