12

Ho utilizzato Nlog per scopi di registrazione in una particolare DLL. La DLL viene quindi utilizzata in un'altra applicazione (viene caricata dinamicamente utilizzando System.Reflection.Assembly.LoadFrom(path + a.dll)). Ho inserito manualmente i file Nlog.dll e Nlog.config nella cartella Path e l'applicazione viene eseguita correttamente ma non registra alcun messaggio.rendere il file NLog.config caricare il file da (d: dev) anziché " bin debug "

Tuttavia, quando si procede e si posiziona manualmente il file Nlog.config nella directory dell'applicazione (\bin\debug\) vengono registrati i messaggi.

Qualcuno può farmi sapere come indirizzare il percorso di ricerca per Nlog.Config in una directory diversa (d:\dev) diversa da \bin\debug\.

risposta

31

Di seguito è il modo in cui ho modificato la configurazione di Nlog in modo che punti al file Nlog.config presente nella cartella Executing Assembly.

string assemblyFolder = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); 
NLog.LogManager.Configuration = new NLog.Config.XmlLoggingConfiguration(assemblyFolder + "\\NLog.config", true); 
+1

È possibile utilizzare Path.Combine (assemblyFolder, "NLog.config") – Tempeck

0

La configurazione di NLog deve risiedere nella cartella in cui viene eseguita l'applicazione che esegue in modo dinamico a.dll. Se si sta eseguendo il debug, è per questo che funziona quando lo si inserisce in bin \ debug. Se stai usando Visual Studio, prova a impostare nlog.config su "Copia sempre" e dovrebbe andare dove ti serve.

+0

grazie per la risposta @jim. Ho impostato Nlog.config su "Copia sempre" nel progetto "a" dell'applicazione X e viene copiato nella cartella "\ bin \ debug \" dell'app X. Ma sto utilizzando a.dll in una nuova applicazione (Y) e vuoi andare a 'bin/debug' dell'app Y o apportare modifiche in modo tale che Nlog.config sia cercato nella cartella 'd: \ dev' –

5

Vedere Configuration file locations nel wiki di NLog.

Fondamentalmente modi NLog individua la configurazione è:

  • file di configurazione dell'applicazione standard (di solito applicationname.exe.config)
  • applicationname.exe.nlog nella directory dell'applicazione
  • NLog.config in applicazione di directory
  • NLog.dll.nlog in una directory in cui si trova NLog.dll (solo se NLog non è nel GAC)
  • nome file indicato da NLOG_GLOBAL_CONFIG_FILE variabile di ambiente (se definita, solo NLog 1.0 - supporto rimosso in NLog 2.0)

Non c'è altro modo per farlo.

+1

Ci * è * un modo per farlo, [vedi sopra ] (http://stackoverflow.com/a/16062987/11635) –

2

ho scoperto che

NLog.LogManager.Configuration = new NLog.Config.XmlLoggingConfiguration(logFilePath, true); 

punti in realtà il logger al file che deve essere iscritto per poter, non il file di configurazione. La cosa grandiosa di questo, è che si può definire il percorso del file di registro senza la necessità di conoscere l'ExecutingAssembly - questo è particolarmente utile quando si utilizza ExcelDNA ecc come XLL carica i gruppi in modo dinamico, come un flusso di bit, e così

Assembly.GetExecutingAssembly().Location 

lancia un'eccezione

Problemi correlati