I am using anotar catel fody for logging in my application.
In NLog.config I want to use different levels for certain classes. Example config
<logger name="SpaceA.*"
minlevel="Info"
writeTo="file"
final="true" />
<logger name="*"
minlevel="Debug"
writeTo="file" />
I have created a NLogListener class which derives from catel's LogListenerBase.
public class NLogListener : LogListenerBase
{
private static readonly NLog.Logger Log = NLog.LogManager.GetCurrentClassLogger();
protected override void Debug(ILog log, string message, object extraData)
{
Log.Debug(message);
}
protected override void Info(ILog log, string message, object extraData)
{
Log.Info(message);
}
protected override void Warning(ILog log, string message, object extraData)
{
Log.Warn(message);
}
protected override void Error(ILog log, string message, object extraData)
{
Log.Error(message);
}
#endregion Methods
}
In my code I use Catel Anotar Fody:
LogTo.Debug("Starting something...");
Now no matter where I use the logging, it is all being displayed as coming from the namespace where I have defined the LogListerer.
What am I doing wrong and ergo do I have to change to be able to filter the NLog on class names like it normally should?
The problem is that you get the current class logger in the LogListener:
private static readonly NLog.Logger Log = NLog.LogManager.GetCurrentClassLogger();
That way, you always log to the NLogListener type. What you should do is get the right logger type for each entry:
protected override void Debug(ILog log, string message, object extraData)
{
var nlog = NLog.LogManager.GetClassLogger(log.TargetType);
nlog.Debug(message);
}