12

Użyłem Nlog do zarejestrowania celu w konkretnej bibliotece DLL. Biblioteka DLL jest następnie używana w innej aplikacji (jest ładowana dynamicznie za pomocą System.Reflection.Assembly.LoadFrom(path + a.dll)). Ręcznie umieściłem pliki Nlog.dll i Nlog.config w folderze Path, a aplikacja jest uruchamiana poprawnie, ale nie rejestruje żadnych wiadomości.spraw, aby plik NLog.config wczytał plik z (d: dev) zamiast " bin debug "

Jednak po ręcznym umieszczeniu pliku Nlog.config w katalogu aplikacji (\bin\debug\) jest rejestrowany komunikat.

Czy ktoś może mi powiedzieć, jak wskazać lokalizację wyszukiwania dla Nlog.Config do innego katalogu (d:\dev) innego niż \bin\debug\.

Odpowiedz

31

Poniżej opisano sposób zmiany konfiguracji Nlog, tak aby wskazywał plik Nlog.config obecny w folderze Executing Assembly.

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

Możesz użyć Path.Combine (assemblyFolder, "NLog.config") – Tempeck

0

Konfiguracja NLog musi znajdować się w folderze, z którego jest uruchamiana aplikacja dynamicznie pobierająca plik ..dll. Jeśli debugujesz, dlatego działa po umieszczeniu go w bin \ debug. Jeśli używasz programu Visual Studio, spróbuj ustawić plik nlog.config na "Kopiuj zawsze" i powinien on zostać wyświetlony tam, gdzie jest potrzebny.

+0

dzięki za odpowiedź @jim. Ustawiłem Nlog.config na "Copy Always" w projekcie "a" aplikacji X i kopiuje do folderu \ bin \ debug \ 'aplikacji X. Ale używam a.dll w zupełnie nowej aplikacji (Y) i chce przejść do "bin/debug" aplikacji Y lub wprowadzić takie zmiany, aby Nlog.config był sprawdzany w folderze "d: \ dev" –

5

Zobacz Configuration file locations na wiki NLog.

Zasadniczo sposobów NLog lokalizuje config to:

  • plik Standardowa konfiguracja aplikacji (zazwyczaj applicationname.exe.config)
  • aplikacja.exe.nlog w katalogu aplikacji
  • plik NLog.config w aplikacji użytkownika katalog
  • plik NLog.dll.nlog w katalogu, w którym znajduje NLog.dll (tylko jeśli NLog nie jest w GAC) Nazwa
  • pliku wskazywanego przez NLOG_GLOBAL_CONFIG_FILE zmienna środowiskowa (jeśli zdefiniowano, tylko NLog 1.0 - obsługa usunięta w NLog 2.0)

Nie ma innego sposobu, aby to zrobić.

+1

. * Jest * sposób, aby to zrobić, [patrz wyżej ] (http://stackoverflow.com/a/16062987/11635) –

2

stwierdziliśmy, że

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

faktycznie wskazuje rejestratora do pliku, który ma być rejestrowane, a nie w pliku konfiguracyjnym. Wspaniałą rzeczą jest to, że można określić ścieżkę do pliku dziennika bez konieczności znać ExecutingAssembly - jest to szczególnie przydatne podczas korzystania ExcelDNA etc jak XLL ładuje zespoły dynamicznie jako bitstream, a więc

Assembly.GetExecutingAssembly().Location 

zgłasza wyjątek.

Powiązane problemy