如何解决如何使用 FluentMigrator v3.2.15 In-Process runner 将日志输出定向到文件?
我有一个使用 FluentMigrator 2.0.7 构建的 .NET 4.5.2 迁移运行程序,“我正在尝试迁移到 .NET 5.0 和 FluentMigrator 3.2.15。
var serviceProvider = new ServiceCollection()
.AddSingleton<ILoggerProvider,sqlScriptFluentMigratorLoggerProvider>()
.Configure<LogFileFluentMigratorLoggerOptions>(o => {
o.OutputFileName = "MyFilename.log";
})
.AddLogging(lb => lb.AddFluentMigratorConsole())
.Configure<FluentMigratorLoggerOptions>(o =>
{
o.Showsql = true;
o.Showelapsedtime = true;
})
.AddFluentMigratorCore()
.ConfigureRunner(builder =>
builder
.AddsqlServer2016()
.WithGlobalConnectionString(this.options.connectionString.ExpandDataDirectory())
.WithMigrationsIn(this.assembly)
)
.BuildServiceProvider();
using (var scope = serviceProvider.CreateScope())
{
var runner = scope.ServiceProvider.GetrequiredService<IMigrationRunner>();
if (this.options.reverseMigration)
runner.MigrateDown(0);
else
runner.MigrateUp();
}
我的问题很简单 - 当我尝试运行迁移时出现错误:
尝试激活“FluentMigrator.Runner.Logging.sqlScriptFluentMigratorLoggerProvider”时无法解析“System.IO.TextWriter”类型的服务。
发生的事情很简单 - TextWriter 是一个抽象类,无法启动。
但是我如何配置 ServiceProvider 以便当它被要求提供 TextWriter 时,它返回一个写入我提供给 LogFileFluentMigratorLoggerOptions 的 OutputFileName 的 StreamWriter?
===
已编辑:
我可以这样做:
using var logStream = new FileStream(this.options.outputFilename,FileMode.Append);
using var sw = new StreamWriter(logStream);
var serviceProvider = new ServiceCollection()
.AddSingleton<TextWriter>(sw)
.AddSingleton<ILoggerProvider,sqlScriptFluentMigratorLoggerProvider>()
...
但我觉得很丑……
解决方法
我可以通过将 LogFileFluentMigratorLoggerProvider 注册为单例然后配置它来将 sql 输出写入文本文件。 LogFileFluentMigratorLoggerProvider 继承自 SqlScriptFluentMigratorLoggerProvider 并负责为您实例化 StreamWriter。
ShipWeapon
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。