C# 无法使用Serilog在ASP.NET核心控制器中添加我的日志记录
我有一个使用ASPNET Core v2的控制器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 =>
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();