使用 Serilog 记录轨道交通
Logging Mass Transit with Serilog
我有这个控制台应用程序项目,我在其中使用 EF6 和 postgresql、Quartz 和 Mass Transit 作为 DI,我使用 Castle Winsdor。该项目的目标是定期检查一个文件夹(或多个文件夹)是否有新文件并处理它们(主要是通过将数据存储在数据库中)。
我想使用日志记录服务进行调试,然后遇到了 Serilog。我设法将它添加到 Quartz 和 EF,但是我在将它添加到 Mass Transit 时遇到了问题。
到目前为止我做了什么:
我已将 Serilog 添加为 Castle.Core.Logging
的日志记录
public void Install(IWindsorContainer container, IConfigurationStore store)
{
container.Auto(Classes.FromThisAssembly());
var factory = container.Resolve<ILoggerFactory>();
container.AddFacility<LoggingFacility>(f => f.LogUsing(factory as SerilogFactory));
}
然后我使用 Logger 拦截器将它添加到 EF,并使用 Serilog 设置将它添加到 Quartz。
但现在我想将它添加到我的 MassTransit Automatonymous,但我无法弄清楚它。
首先,我尝试从 BusControl 配置中添加 Serilog:
BusControl = Bus.Factory.CreateUsingInMemory(cfg =>
{
cfg.UseSerilog(Log.Logger); //Where `Log.Logger` is the Serilog Logger
});
但后来我遇到了一个 MassTransit.Logging.ILogger
异常也是 discussed here。
在该线程中,我发现我应该通过像这样配置 MassTransit LogContext
添加 Serilog(或任何其他记录器)in a different way
LogContext.ConfigureCurrentLogContext(loggerFactory);
。但问题是,他们现在正在使用
Microsoft.Extensions.Logging.Abstractions
并且我无法将记录器从 Castle.Core.Logging.ILogger
转换为 Microsoft.Extensions.Logging.ILogger
。
有什么方法可以使用我的 Castle.Core.Logging 记录器吗?
您需要使用 Serilog.Extensions.Logging
NuGet 包,它为 Serilog 添加了 ILoggerFactory
支持。您可以通过该接口通过以下方式配置 MassTransit:
LogContext.ConfigureCurrentLogContext(loggerFactory);
MassTransit 不使用任何 Castle 设施,但是,有一个 NuGet 包用于使用 ]Castle Windsor](https://masstransit-project.com/usage/containers/castlewindsor.html) 配置 MassTransit。
更新:您可以在 this sample
中查看示例 Serilog 配置
我有这个控制台应用程序项目,我在其中使用 EF6 和 postgresql、Quartz 和 Mass Transit 作为 DI,我使用 Castle Winsdor。该项目的目标是定期检查一个文件夹(或多个文件夹)是否有新文件并处理它们(主要是通过将数据存储在数据库中)。
我想使用日志记录服务进行调试,然后遇到了 Serilog。我设法将它添加到 Quartz 和 EF,但是我在将它添加到 Mass Transit 时遇到了问题。
到目前为止我做了什么:
我已将 Serilog 添加为 Castle.Core.Logging
public void Install(IWindsorContainer container, IConfigurationStore store)
{
container.Auto(Classes.FromThisAssembly());
var factory = container.Resolve<ILoggerFactory>();
container.AddFacility<LoggingFacility>(f => f.LogUsing(factory as SerilogFactory));
}
然后我使用 Logger 拦截器将它添加到 EF,并使用 Serilog 设置将它添加到 Quartz。
但现在我想将它添加到我的 MassTransit Automatonymous,但我无法弄清楚它。
首先,我尝试从 BusControl 配置中添加 Serilog:
BusControl = Bus.Factory.CreateUsingInMemory(cfg =>
{
cfg.UseSerilog(Log.Logger); //Where `Log.Logger` is the Serilog Logger
});
但后来我遇到了一个 MassTransit.Logging.ILogger
异常也是 discussed here。
在该线程中,我发现我应该通过像这样配置 MassTransit LogContext
添加 Serilog(或任何其他记录器)in a different way
LogContext.ConfigureCurrentLogContext(loggerFactory);
。但问题是,他们现在正在使用
Microsoft.Extensions.Logging.Abstractions
并且我无法将记录器从 Castle.Core.Logging.ILogger
转换为 Microsoft.Extensions.Logging.ILogger
。
有什么方法可以使用我的 Castle.Core.Logging 记录器吗?
您需要使用 Serilog.Extensions.Logging
NuGet 包,它为 Serilog 添加了 ILoggerFactory
支持。您可以通过该接口通过以下方式配置 MassTransit:
LogContext.ConfigureCurrentLogContext(loggerFactory);
MassTransit 不使用任何 Castle 设施,但是,有一个 NuGet 包用于使用 ]Castle Windsor](https://masstransit-project.com/usage/containers/castlewindsor.html) 配置 MassTransit。
更新:您可以在 this sample
中查看示例 Serilog 配置