公共类库中的Serilog设置 - ASP.NET Core 2

时间:2018-02-20 19:18:04

标签: c# asp.net-core serilog

我有几个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应用程序中添加额外的接收器,它们仍然有效。

有什么想法吗? 感谢。

0 个答案:

没有答案