2011-09-07 8 views
9

He configurado un objetivo archivo para Nlog de la siguiente manera:¿Cómo puedo consultar la ruta a un archivo de registro Nlog?

<targets> 
    <target name="asyncFile" xsi:type="AsyncWrapper"> 
    <target xsi:type="File" name="logfile" fileName="${basedir}/Logs/${shortdate}.log" 
      layout="${longdate} ${uppercase:${level}} ${message}" /> 
    </target>  
</targets> 

¿Cómo puedo consultar la ruta de sistema de archivos real (fileName) de esta File de destino a través de la API de Nlog?

+0

¿Cuál es su requisito? ¿Por qué necesitas saber el camino? – ccellar

+3

@ckeller Es interesante porque no necesariamente se que '$ {}' basedir evalúa a. – aknuds1

Respuesta

8

acabo tratado de obtener esta información a través de la configuration api.

enter image description here

Lamentablemente parece que la configuración es evaluado por el objetivo real y no se resuelve en la configuración.

Como {basedir} se refiere al directorio base de dominio de aplicación puede simplemente leer este valor por su cuenta.

var basedirPath = AppDomain.CurrentDomain.BaseDirectory; 
0

Puede usar la API nLog dentro del código en lugar de un archivo de configuración xml. Luego, en su aplicación, se asigna la ruta del archivo de registro a una variable, y utiliza esa variable como nombre de archivo del objetivo. Se puede acceder a esa variable, o cambiar en cualquier momento que le gusta (mi fragmento, aquí, se define dentro de una clase).

Private MainNlogConfig As New LoggingConfiguration() 
Dim localrule As New LoggingRule(*, LogLevel.Info, locallogtarget) 
MainNlogConfig..AddTarget("file", locallogtarget) 

With locallogtarget 
    .Layout = "${longdate} ${logger} ${message}" 
    .FileName = appdir & appName & ".log" '----->LOOK HERE! 
End With 
LogManager.Configuration = MainNlogConfig 
8
private string GetLogFile() 
    { 
     var fileTarget = LogManager.Configuration.AllTargets.FirstOrDefault(t => t is FileTarget) as FileTarget; 
     return fileTarget == null ? string.Empty : fileTarget.FileName.Render(new LogEventInfo { Level = LogLevel.Info }); 
    } 
Cuestiones relacionadas