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