2

I have a custom implementation of log4net for .net core to use with

Microsoft.Extensions.Logging.ILoggerFactory 

and

Microsoft.Extensions.Logging.ILoggerProvider

few questions..

#1: If i need to use the logger in another class say "EmailProcessor", how to dependency inject the log4net logger configured as shown below.??

#2: Also. Am i going in the right direction.? trying to dependency inject an instance created outside the container..?

pardon me if i am doing something stupid.. but please let me know.

Here is the code.. limited to brevity.

public class EmailProcessor
{
    public EmailProcessor(EmailServiceDbContext context, ILogger<EmailProcessor> logger)
    {
        ;
    }
}

Program.cs

public class Program
{
    public static IConfigurationRoot Configuration { get; set; } 
    public static Microsoft.Extensions.Logging.ILogger Log4NetLogger { get; set; }

    public static void Main(string[] args)
    {
        InitializeConfiguration();

        var services = new ServiceCollection();
        var serviceProvider = services.BuildServiceProvider();

        // configure logging
        ConfigureLog4net();

    } 

    private static void InitializeConfiguration()
    {
        var builder = new ConfigurationBuilder()
         .SetBasePath(Directory.GetCurrentDirectory())
        .AddJsonFile("appsettings.json");

        Configuration = builder.Build();
    } 

    private static void ConfigureLog4net(IServiceProvider serviceProvider)
    {
        // this will be used by rolling file appender.
        var logDestination = @"\path\to\log\file\log-file-name";

        // Add log4net logging provider
        serviceProvider.GetService<ILoggerFactory>().AddLog4Net("./log4net.config", logDestination);

        // create logger 
        var logger = serviceProvider.GetService<ILoggerFactory>().CreateLogger("app");
    }

} 

If i am not mistaken, this line actually creates an instance of the logger..

// create logger 
var logger = serviceProvider.GetService<ILoggerFactory>().CreateLogger("app"); 

So how do I dependency inject this logger into:

EmailProcessor() constructor
blogs4t
  • 2,329
  • 5
  • 20
  • 33
  • You have to associate/register the logging interfaces and their implementations with the service collection before building the service provider. – Nkosi Aug 02 '17 at 19:55
  • Please reduce the amount of code in your question to get a [Minimal, Complete, and Verifiable example](https://stackoverflow.com/help/mcve). – Steven Aug 02 '17 at 20:09

0 Answers0