2016-02-05 27 views
15

A meno che non mi manchi completamente, ho l'impressione che lo NLog documentation utilizzi ${basedir} nei suoi esempi, senza spiegare quale dovrebbe essere la posizione.

Dove posso trovare informazioni che elencano tutte le opzioni possibili con una descrizione significativa?

ho questa configurazione definita:

<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" throwExceptions="true"> 
    <targets> 
    <target name="file" xsi:type="File" 
       layout="${longdate} ${logger} ${message}" 
       fileName="${basedir}/logs/${shortdate}.txt" 
       keepFileOpen="false" 
       encoding="iso-8859-2" /> 
    </targets> 
    <rules> 
    <logger name="*" minlevel="Debug" writeTo="file" /> 
    </rules> 
</nlog> 

Funziona per quanto posso dire, ma non ho la più pallida idea dove si registra nulla.

+1

Ricordarsi di modificare Proprietà file in Visual Studio per il file di configurazione di NLog su Copia in directory di output => Sempre. Alternativa iniettare nlog-config nell'app.config https://gist.github.com/Chrisso/1703644 –

risposta

14

${basedir} - directory in cui viene eseguita l'applicazione. Penso che lo troverai utile: https://github.com/NLog/NLog/wiki/Layout-Renderers

+2

Quindi la cartella 'bin \ debug', se la si esegue da VS? In tal caso non funziona, perché non vedo alcun file. Non ho alcun errore però. – Spikee

+0

@Spikee È possibile verificarlo nella propria applicazione da AppDomain.CurrentDomain.BaseDirectory – galakt

+1

Ciò è effettivamente 'bin \ debug', ma non vedo la sottocartella' logs' né alcun file. – Spikee

3

Dipende anche dalla piattaforma. Per i normali progetti .Net è effettivamente bin o bin/debug ecc. (A seconda delle impostazioni di costruzione)

Per coreclr/aspnet5 è la cartella bin del runtime dnx. Questo è ancora in corso.

2

in base alle risposte e commenti già previsti, la risposta può essere riassunta per applicazioni .NET:

AppDomain.CurrentDomain.BaseDirectory 

Per Console o Windows Form, questa directory è bin/debug mentre all'interno di Visual Studio. Se l'applicazione è distribuita, il percorso sarà probabilmente il percorso dell'eseguibile.

Per le applicazioni Web (ASP.NET) questa sarà la directory radice dell'applicazione Web.

Il mancato rilevamento di file può essere causato da diverse cause che includono: Errori di configurazione di NLog e impossibilità di scrivere il file di destinazione. Per esporre questi errori assicurarsi che NLog.config (o nlog configurazione incorporato in web.config o app.config) specifica un file di registro interno di uscita tali errori:

<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     internalLogFile="C:\NLogError\NLog.log"> 

<!-- targets and rules come here --> 

</nlog> 
2

Un'altra possibilità per il fallimento è che se si è utilizzando NLog.config, NLog non riesce a trovare il file di configurazione. Imposta il file su Copia sempre nella tua build e finirà nella directory bin, in modo che NLog possa trovarlo in fase di runtime.

Se si copiano le informazioni di configurazione di NLog sul proprio App.config, non si avrà questo problema.

+0

Mi sono imbattuto in una cosa simile in cui avevo bisogno di capovolgere l'opzione "Copia in uscita" per una copia di "NLog.xsd" (a cui si fa riferimento nella configurazione di NLog) nel mio progetto di Visual Studio prima che potessi ottenere qualsiasi registro scrivere nella mia cartella "bin/debug" durante il test. –