2011-09-07 6 views
9

Ho configurato un obiettivo per il file di NLog come segue:Come posso interrogare il percorso di un file di log di 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> 

Come posso interrogare il percorso del file system attuale (fileName) del presente File di destinazione tramite le API di NLog?

+0

Qual è la vostra esigenza? Perché hai bisogno di sapere il percorso? – ccellar

+3

@ckeller È interessante perché non so necessariamente cosa valuti '$ {basedir}'. – aknuds1

risposta

8

Ho appena cercato di ottenere queste informazioni tramite configuration api.

enter image description here

Purtroppo sembra che la configurazione viene valutata l'obiettivo reale e non si risolve nella configurazione.

Come {basedir} si riferisce alla directory base di appdomain è possibile semplicemente leggere questo valore per conto proprio.

var basedirPath = AppDomain.CurrentDomain.BaseDirectory; 
0

È possibile utilizzare l'API di nLog all'interno del codice anziché in un file di configurazione xml. Quindi, nell'applicazione, si assegna il percorso del file del registro a una variabile e si utilizza tale variabile come nome file della destinazione. Puoi accedere a quella variabile, O cambiarla in qualsiasi momento (il mio frammento, qui, è definito all'interno di una classe).

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 }); 
    } 
Problemi correlati