我有几个ASP.NET Core 2应用程序,我想用各种Sink设置Serilog。 为了不必在每个项目中设置Serilog,我在一个单独的类库中有一个单独的类 BaseProgram ,我的其他程序类继承了这个类(I' ve)省略了brivety的一些代码
public abstract class BaseProgram
{
public static int MainWrapper(Action run)
{
var configuration = new ConfigurationBuilder()
.AddJsonFile("appsettings.json")
.Build();
Log.Logger = new LoggerConfiguration()
.ReadFrom.Configuration(configuration)
.Enrich.FromLogContext()
.CreateLogger();
try
{
Log.Information("Starting web host");
run();
return 0;
}
catch (Exception ex)
{
Log.Fatal(ex, "Host terminated unexpectedly");
return 1;
}
finally
{
Log.CloseAndFlush();
}
}
}
我的程序类看起来像:
public class Program : BaseProgram
{
public static void Main(string args[])
{
MainWrapper(() => BuildWebHost(args).Run());
}
}
现在,我的问题是,如果我只在Common库中添加一个Serilog Sink(Rolling File Appender)并在appsettings.json中添加它的配置,那么Sink就不会被加载。
另一方面,如果我将Rolling File Appender添加到ASP.NET Core项目(并且不做其他任何改动),一切都按预期工作。 我注意到在第一种情况下,程序集Serilog.Sinks.File和Serilog.Sinks.RollingFile没有被复制到ASP.NET Core应用程序的bin文件夹中。我已经强制加载这些组件,但它仍然无法正常工作。
现在我已经在类库中以编程方式设置了Rolling File appender,它运行正常。我还可以在ASP.NET Core应用程序中添加额外的接收器,它们仍然有效。
有什么想法吗? 感谢。