Ventaja de usar "registrador por archivo" en NLog: tiene la posibilidad de administrar / filtrar registros por espacio de nombres y nombre de clase. Ejemplo:
<logger name="A.NameSpace.MyClass" minlevel="Debug" writeTo="ImportantLogs" />
<logger name="A.NameSpace.MyOtherClass" minlevel="Trace" writeTo="ImportantLogs" />
<logger name="StupidLibrary.*" minlevel="Error" writeTo="StupidLibraryLogs" />
<!-- Hide other messages from StupidLibrary -->
<logger name="StupidLibrary.*" final="true" />
<!-- Log all but hidden messages -->
<logger name="*" writeTo="AllLogs" />
NLogger tiene un fragmento de código muy útil para hacer esto. El nlogger
fragmento creará el siguiente código:
private static NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger();
Tan solo unas pocas pulsaciones de teclas y tienes registrador por clase. Utilizará el espacio de nombres y el nombre de la clase como nombre del registrador. Para establecer un nombre diferente a su registrador de clases, puede usar esto:
private static NLog.Logger logger = NLog.LogManager.GetLogger("MyLib.MyName");
Y, como dijo @JeremyWiebe, no tiene que usar trucos para obtener el nombre de la clase que está tratando de registrar un mensaje: el nombre del registrador (que generalmente es el nombre de la clase) puede registrarse fácilmente en el archivo (u otro objetivo) mediante el uso ${logger}
en el diseño.