2011-09-07 14 views
9

mam skonfigurowany cel pliku dla nlog następująco:Jak mogę zapytać o ścieżkę do pliku dziennika 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> 

Jak mogę zapytania rzeczywistą ścieżkę systemu plików (fileName) tego File cel poprzez nlog API?

+0

Jaki jest Twój wymóg? Dlaczego musisz znać ścieżkę? – ccellar

+3

@ckeller Jest to interesujące, ponieważ nie wiem, co '$ {basedir}' ocenia. – aknuds1

Odpowiedz

8

Właśnie próbowałem uzyskać te informacje za pośrednictwem configuration api.

enter image description here

Niestety wygląda na to, że konfiguracja jest oceniany przez rzeczywisty cel i nie jest rozwiązany w konfiguracji.

Jako {basedir} odnosi się do katalogu podstawowego appdomain można po prostu przeczytać tę wartość na własną rękę.

var basedirPath = AppDomain.CurrentDomain.BaseDirectory; 
0

Możesz użyć api nLog w kodzie zamiast pliku konfiguracyjnego xml. Następnie, w aplikacji, przypisz ścieżkę pliku dziennika do zmiennej i użyj tej zmiennej jako nazwy pliku docelowego. Możesz uzyskać dostęp do tej zmiennej, LUB zmienić ją w dowolnym momencie (mój fragment, tutaj, jest zdefiniowany wewnątrz klasy).

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 }); 
    } 
Powiązane problemy