2016-02-05 16 views
15

Trừ khi tôi hoàn toàn bỏ lỡ nó, tôi theo ấn tượng rằng NLog documentation sử dụng ${basedir} trong các ví dụ của nó, mà không giải thích vị trí của nó là gì.

Tôi có thể tìm thông tin liệt kê tất cả các tùy chọn có thể có với mô tả có ý nghĩa ở đâu?

tôi có cấu hình này định nghĩa:

<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> 

Nó hoạt động như xa như tôi có thể nói, nhưng tôi đã không có một đầu mối, nơi nó có thể ghi bất cứ điều gì.

+1

Hãy nhớ thay đổi Thuộc tính tệp trong Visual Studio cho tệp NLog-config thành Sao chép vào thư mục đầu ra => Luôn luôn. Thay thế tiêm nlog-config vào app.config https://gist.github.com/Chrisso/1703644 –

Trả lời

14

${basedir} - thư mục nơi ứng dụng chạy. Tôi nghĩ, bạn sẽ thấy nó hữu ích: https://github.com/NLog/NLog/wiki/Layout-Renderers

+2

Vì vậy, thư mục 'bin \ debug', nếu bạn đang chạy nó từ VS? Trong trường hợp đó nó không hoạt động, bởi vì tôi không thấy bất kỳ tập tin nào. Tôi không nhận được bất kỳ lỗi nào. – Spikee

+0

@Spikee Bạn có thể kiểm tra nó trong ứng dụng của bạn bằng AppDomain.CurrentDomain.BaseDirectory – galakt

+1

Đó là 'bin \ debug' thực sự, nhưng tôi không thấy thư mục con' logs', cũng không phải bất kỳ tệp nào. – Spikee

3

Nó còn phụ thuộc vào nền tảng. Đối với các dự án .Net thông thường, nó thực sự là bin hoặc bin/debug, vv (tùy thuộc vào các cài đặt xây dựng của bạn)

Đối với coreclr/aspnet5 đó là thư mục bin của thời gian chạy dnx của bạn. Đó vẫn là công việc đang diễn ra.

2

Dựa trên câu trả lời đã được cung cấp và bình luận, câu trả lời có thể được tóm tắt cho các ứng dụng .NET:

AppDomain.CurrentDomain.BaseDirectory 

Đối Console hoặc ứng dụng Windows Forms, thư mục này là bin/debug trong khi bên trong Visual Studio. Nếu ứng dụng được triển khai, đường dẫn có thể sẽ là đường dẫn thực thi nhất.

Đối với các ứng dụng Web (ASP.NET), đây sẽ là thư mục gốc của ứng dụng Web.

Không thấy bất kỳ tệp nào có thể được kích hoạt bởi một số nguyên nhân bao gồm: lỗi cấu hình NLog và không thể ghi tệp đích. Để lộ các lỗi này đảm bảo rằng NLog.config (hoặc nLog cấu hình nhúng trong web.config hoặc app.config) xác định một log file nội bộ để ra sai sót như:

<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

Một khả năng cho sự thất bại là nếu bạn là bằng cách sử dụng NLog.config, NLog không thể tìm thấy tập tin cấu hình. Đặt tập tin để sao chép Luôn luôn trong xây dựng của bạn và nó sẽ kết thúc trong thư mục bin của bạn, vì vậy NLog có thể tìm thấy nó trong thời gian chạy.

Nếu bạn sao chép thông tin cấu hình NLog vào App.config của mình, bạn sẽ không gặp phải vấn đề này.

+0

Tôi cũng chạy vào một điều tương tự mà tôi cần phải lật tùy chọn "Copy to Output" trên bản sao của "NLog.xsd" (được tham chiếu trong cấu hình NLog) trong dự án Visual Studio trước khi tôi có thể lấy bất kỳ nhật ký nào để viết trong thư mục "bin/debug" của tôi trong khi thử nghiệm. –

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