已经在Visual Studio 2017中成功创建并运行了一个简单的Azure持久功能,我想介绍一下日志记录。
Visual Studio项目模板使用以下命令生成静态HttpStart类: 运行方法,该方法包含类型为Microsoft.Extensions.Logging.ILogger的可选参数。
我不知道如何将依赖项注入持久功能项目中。谁能指出我如何实现这一目标的例子?
在我看来,我将需要一些类,在其中需要使用Microsoft.Extensions.Logging.LoggingFactory.CreateLogger()方法。
我想这种逻辑将需要在以某种方式(类似于在静态main方法中使用WebHostBuilder)连接到运行时管道的容器类中。
谢谢
答案 0 :(得分:1)
@Thomas向我指出了一些示例,这些示例用于提取代码,从而在编写持久函数项目时允许依赖项注入起作用:
using System.IO;
using System.Reflection;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Hosting;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using NLog;
using NLog.Extensions.Logging;
using tmetadastoreFnApp;
using Willezone.Azure.WebJobs.Extensions.DependencyInjection;
using ILogger = Microsoft.Extensions.Logging.ILogger;
using LogLevel = Microsoft.Extensions.Logging.LogLevel;
[assembly: WebJobsStartup(typeof(Startup))]
namespace tmetadastoreFnApp
{
internal class Startup : IWebJobsStartup
{
public void Configure(IWebJobsBuilder builder) =>
builder.AddDependencyInjection(ConfigureServices);
private void ConfigureServices(IServiceCollection services)
{
services.AddSingleton<ILoggerFactory, LoggerFactory>();
services.AddSingleton(typeof(ILogger<>), typeof(Logger<>));
services.AddLogging((builder) => builder.SetMinimumLevel(LogLevel.Trace));
var serviceProvider = services.BuildServiceProvider();
var loggerFactory = serviceProvider.GetRequiredService<ILoggerFactory>();
loggerFactory.AddNLog(new NLogProviderOptions { CaptureMessageTemplates = true, CaptureMessageProperties = true });
var dir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
LogManager.LoadConfiguration(Directory.GetParent(dir) + "\\nlog.config");
}
}
}