12

Tôi đã sử dụng Nlog cho mục đích ghi nhật ký trong một DLL cụ thể. DLL sau đó được sử dụng trong một ứng dụng khác (nó được nạp động bằng cách sử dụng System.Reflection.Assembly.LoadFrom(path + a.dll)). Tôi đặt thủ công các tệp Nlog.dll và Nlog.config trong thư mục Đường dẫn và ứng dụng thực thi đúng cách nhưng không ghi nhật ký bất kỳ thư nào.làm cho tệp NLog.config tải tệp từ (d: dev) thay vì " bin debug "

Tuy nhiên, khi tôi tiếp tục và đặt tệp Nlog.config theo cách thủ công trong thư mục ứng dụng (\bin\debug\) là thông báo nhật ký.

Ai đó có thể cho tôi biết cách chỉ định vị trí tìm kiếm cho Nlog.Config vào một thư mục khác (d:\dev) khác với \bin\debug\.

Trả lời

31

Dưới đây là cách tôi thay đổi cấu hình của Nlog để trỏ tới tệp Nlog.config có trong thư mục Thực thi của Assembly.

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

Bạn có thể sử dụng Path.Combine (assemblyFolder, "NLog.config") – Tempeck

0

Cấu hình NLog cần nằm trong thư mục nơi ứng dụng đang kéo động a.dll đang chạy. Nếu bạn đang gỡ lỗi, đó là lý do tại sao nó hoạt động khi bạn đặt nó vào bin \ debug. Nếu bạn đang sử dụng Visual Studio, hãy thử đặt nlog.config thành 'Sao chép Luôn luôn' và nó sẽ đến nơi bạn cần.

+0

cảm ơn câu trả lời @jim. Tôi đã thiết lập Nlog.config thành 'Copy Always' trong dự án 'a' của ứng dụng X, và nó sao chép vào thư mục '\ bin \ debug \' của ứng dụng X. Nhưng tôi đang sử dụng a.dll trong một ứng dụng hoàn toàn mới (Y) và muốn nó đi đến 'bin/debug' của ứng dụng Y hoặc thực hiện thay đổi sao cho Nlog.config được tra cứu trong thư mục 'd: \ dev' –

5

Xem Configuration file locations trên wiki NLog.

Về cơ bản những cách NLog nằm cấu hình là:

tập tin cấu hình ứng dụng tiêu chuẩn
  • (thường applicationname.exe.config)
  • applicationname.exe.nlog trong thư mục ứng dụng của
  • NLog.config trong ứng dụng của thư mục
  • NLog.dll.nlog trong thư mục nơi NLog.dll được đặt (chỉ khi NLog không có trong GAC)
  • tên tệp được chỉ định bởi NLOG_GLOBAL_CONFIG_FILE biến môi trường (nếu được xác định, chỉ NLog 1.0 - hỗ trợ bị loại bỏ trong NLog 2.0)

Không có cách nào khác để làm điều này.

+1

Có * là * một cách để làm điều này, [xem ở trên ] (http://stackoverflow.com/a/16062987/11635) –

2

tôi thấy rằng

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

thực sự chỉ logger đến tập tin mà là để được ghi nhận vào, không phải là tập tin cấu hình. Những điều tuyệt vời về điều này, là bạn có thể xác định đường dẫn tập tin log mà không cần phải biết ExecutingAssembly - điều này đặc biệt hữu ích khi sử dụng ExcelDNA vv như XLL tải lắp ráp động như một bitstream, vv

Assembly.GetExecutingAssembly().Location 

ném một ngoại lệ.

Các vấn đề liên quan