【问题标题】:Asp.net core get logger in ConfigureAppConfigurationAsp.net core 在 ConfigureAppConfiguration 中获取记录器
【发布时间】:2019-04-15 05:18:54
【问题描述】:

我想在“TODO”行中使用记录器,因为我在添加“AddJsonConfigurationSourceDecryption”方法时需要记录,有什么方法可以获取记录器吗?

Logging in ASP.NET Core

  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


【解决方案1】:

@0xced 在这里回答了这个问题 How to create a LoggerFactory with a ConsoleLoggerProvider?

从 dotnetcore3.1 开始,代码可以这样编写

private static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args).ConfigureAppConfiguration(
                (hostContext, config) =>
                    {
                        var loggerFactory = LoggerFactory.Create(
                            builder => 
                                {
                                    builder
                                        .AddFilter("Microsoft", LogLevel.Warning)
                                        .AddFilter("System", LogLevel.Warning)
                                        .AddFilter("YourProgramNamespsace.Program", LogLevel.Debug)
                                        .AddConsole();
                                });
                        var logger = loggerFactory.CreateLogger<Program>();
                        logger.LogInformation("Hello from ConfigureAppConfiguration");
                    ...
                    })

【讨论】:

    猜你喜欢
    • 2019-12-11
    • 2021-05-13
    • 2022-11-29
    • 2020-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多