如何关闭Azure功能中的NLog日志记录?

时间:2020-08-18 20:37:33

标签: c# azure azure-functions nlog

Azure Functions实例化程序集时,我需要设置NLog。

public class Startup : FunctionsStartup {
    public Startup()
    {        
        var logger = NLogBuilder.ConfigureNLog("nlog.config").GetCurrentClassLogger();
    }
    public override void Configure(IFunctionsHostBuilder builder) {
        ... other setup code
        builder.Services.AddLogging((loggingBuilder) =>
        {
            loggingBuilder.AddNLog();
        });
    }
}

NLog员工建议通过NLog.LogManager.Shutdown()手动关闭记录器。 问题是我不确定如何捕获Azure实例以关闭我的程序集。

Azure是否公开了某种我没有看到的Dispose事件?

1 个答案:

答案 0 :(得分:1)

看起来您依赖于Microsoft Extension Logging,所以我可能会陷入其生存期逻辑(禁用AutoShutdown并启用ShutdownOnDispose

public class Startup : FunctionsStartup {
    public Startup()
    {
        var logger = LogManager.Setup()
           .SetupExtensions(e => e.AutoLoadAssemblies(false))
           .LoadConfigurationFromFile("nlog.config", optional: false)
           .LoadConfiguration(builder => builder.LogFactory.AutoShutdown = false)
           .GetCurrentClassLogger();
    }

    public override void Configure(IFunctionsHostBuilder builder) {
        ... other setup code
        builder.Services.AddLogging((loggingBuilder) =>
        {
            loggingBuilder.AddNLog(new NLogProviderOptions() { ShutdownOnDispose = true });
        });
    }
}