【发布时间】:2019-04-15 05:18:54
【问题描述】:
我想在“TODO”行中使用记录器,因为我在添加“AddJsonConfigurationSourceDecryption”方法时需要记录,有什么方法可以获取记录器吗?
public class Program
{
public static void Main(string[] args)
{
ILogger<Program> logger = null;
try
{
var host = CreateWebHostBuilder(args).Build();
ApplicationLogging.LoggerFactory = host.Services.GetRequiredService<ILoggerFactory>();
logger = host.Services.GetRequiredService<ILogger<Program>>();
logger.LogInformation("start thin API service...");
host.Run();
}
catch (Exception ex)
{
logger?.LogError(ex, "Stopped program because of exception");
throw;
}
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args)
{
return WebHost.CreateDefaultBuilder(args)
.UseKestrel(option => option.AddServerHeader = false)
.ConfigureLogging((host, builder) => { builder.SetMinimumLevel(LogLevel.Trace); })
.UseNLog()
.ConfigureServices(services => services.AddAutofac())
.ConfigureAppConfiguration((context, builder) =>
{
//TODO: Logger.............
builder.SetBasePath(Directory.GetCurrentDirectory());
builder.AddJsonConfigurationSourceDecryption();
})
.UseStartup<Startup>();
}
}
【问题讨论】:
-
您的问题大多不清楚,但关于如何在没有 DI 的情况下获得
ILogger实例,答案是您不能。你必须能够注入它。 -
我使用 EncryptedJsonConfigurationProvider 替换 JsonConfigurationProvider,我想在 EncryptedJsonConfigurationProvider 中使用 logger,如何获取 logger?
-
有什么办法在 WebHostBuilder.Builder 之前获取记录器?
-
@ChrisPratt 如果只获取不带di的Logger实例,可以参考stackoverflow.com/questions/48676152/…,但是我想在builder.AddJsonConfigurationSourceDecryption()方法调用时获取logger
标签: asp.net-core loggerfactory