Note: Updated with suggested improvements, closer but still not quite there!
Similar to this question - Passing in the type of the declaring class for NLog using Autofac - I am trying to inject NLog instances into my repository classes.
Interface:
public interface ILogger<T>
where T: class
{
...
}
Implementation:
public class NLogger<T> : ILogger<T>
where T: class
{
private readonly Logger _logger;
public NLogger()
{
_logger = LogManager.GetLogger(typeof(T).FullName);
}
public void Debug(string message)
{
_logger.Debug(message);
}
...
}
Registered with Autofac as:
builder.RegisterGeneric(typeof (NLogger<>)).As(typeof (ILogger<>));
Using breakpoints, I see that Autofac is creating a bunch of ILogger/NLogger's with the correct types for all of my various repositories, but the resulting logs show up with callsite being "NLog.LoggerImpl.Write".
Thanks for any help!
Working solution with generics:
public class NLogger<T> : ILogger<T>
where T: class
{
private readonly Logger _logger;
public NLogger()
{
_logger = LogManager.GetLogger(typeof(T).FullName);
}
public void Debug(string message)
{
_logger.Log(typeof(T), new LogEventInfo(LogLevel.Debug, _logger.Name, message));
}
See Question&Answers more detail:os