我真的需要一些帮助。
我想将NLog与Azure Functions v2(目标框架.NET核心2.2)一起使用-并且已经创建了一个
Startup : FunctionsStartup
用
装饰的类[assembly: FunctionsStartup(typeof(PmsFunctions.Startup))]
并创建了此方法
public override void Configure(IFunctionsHostBuilder builder)
{
builder.Services.AddLogging(loggingBuilder =>
{
loggingBuilder.ClearProviders();
loggingBuilder.SetMinimumLevel(LogLevel.Trace);
loggingBuilder.AddNLog();
}).BuildServiceProvider();
}
在Startup类的构造函数中,我使用代码创建了NLog的配置:
var mailTarget = new MailTarget("mandrill")
{
Html = true,
AddNewLines = true,
ReplaceNewlineWithBrTagInHtml = true,
Subject = "XXXXX",
To = "john@doe.com,
From = "john@doe.com",
Body = "Message: ${message}${newline}${newline}Date: ${date}${newline}${newline}Exception: ${exception:format=tostring}${newline}${newline}",
SmtpUserName = "XXXXXXX",
SmtpPassword = "XXXXXXX",
SmtpAuthentication = SmtpAuthenticationMode.Basic,
SmtpServer = "XXXXXXXX",
SmtpPort = 587
};
var bufferedMailTarget = new BufferingTargetWrapper("bufferedMandril", mailTarget)
{
SlidingTimeout = false,
BufferSize = 100,
FlushTimeout = 10000
};
config.AddTarget(bufferedMailTarget);
var mailRule = new LoggingRule("*", NLog.LogLevel.Warn, bufferedMailTarget);
config.LoggingRules.Add(mailRule);
var logger = NLogBuilder.ConfigureNLog(config).GetCurrentClassLogger
我尝试通过使用注入的ILogger在函数中使用记录器。它在本地运行得很好,但在使用Azure时完全"死"了。我想这就是我配置NLog的方式。
我应该如何做才是正确的?
若要确保NLog遵循Azure函数的生存期,则应将其配置为关闭(并刷新)和microsoft扩展日志记录:
[assembly: FunctionsStartup(typeof(MyNamespace.Startup))]
namespace MyNamespace
{
public class Startup : FunctionsStartup
{
private readonly NLog.Logger Logger;
public Startup()
{
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) =>
{
var nlogOptions = new NLogProviderOptions() {
ShutdownOnDispose = true,
RemoveLoggerFactoryFilter = true
};
loggingBuilder.AddNLog(nlogOptions);
});
}
}
}
通知ShutdownOnDispose = true
和AutoShutdown = false