2012-05-11 43 views
14

Tôi đang cố gắng thêm ghi nhật ký vào ứng dụng đang chạy trên thiết bị di động với Windows Mobile 6.1. .NET Compact framework 3.5. sử dụng NLog.NLog không tạo tệp nhật ký

Tôi đã cài đặt phiên bản phân phối NLog thích hợp.

Tuy nhiên, không có tệp nhật ký nào được tạo.

Đây là tệp NLog.config của tôi.

<?xml version="1.0" encoding="utf-8"?> 
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <targets> 
    <target name="logfile" xsi:type="File" fileName=".\Neolant.ASRM.Terminal.log" layout="${longdate}|${level}|${message}|${exception}" autoFlush="true"/> 
    </targets> 
    <rules> 
    <logger name="*" minlevel="Info" writeTo="logfile" /> 
    </rules> 
</nlog> 

Đây là mã thử nghiệm tôi đang sử dụng.

public static void Main() 
{ 
    try 
    { 
     AppDomain.CurrentDomain.UnhandledException += CurrentDomainOnUnhandledException; 
     var logger = NLog.LogManager.GetLogger("UpperLevel"); 
     logger.Info("test test test."); 
     try 
     { 
      throw new Exception("Unexpected!"); 
     } 
     catch (Exception e) 
     { 
      var logger = NLog.LogManager.GetLogger("UpperLevel"); 
      logger.WarnException("An exception occured.", e); 
     } 
     throw new Exception("Suddenly!");   
    } 
    finally 
    { 
     NLog.LogManager.Flush(); 
    } 
} 

private static void CurrentDomainOnUnhandledException(object sender, UnhandledExceptionEventArgs unhandledExceptionEventArgs) 
{ 
    var logger = NLog.LogManager.GetLogger("UpperLevel"); 
    logger.FatalException("Application closed due to exception.", unhandledExceptionEventArgs.ExceptionObject as Exception); 
    NLog.LogManager.Flush(); 
} 
+1

Bạn đã thử nghiệm với tên file/đường dẫn khác nhau? Ví dụ: 'fileName =" Neolant.ASRM.Terminal.log "' without '. \\'? Nlog.Config nằm trong thư mục ứng dụng? Ngoài ra, bạn có thể bật [Ghi nhật ký nội bộ của Nlog] (http://nlog-project.org/wiki/Logging_is_not_working_-_how_to_troubleshoot_it%3F) để nhận thêm thông tin về sự cố của bạn. – nemesv

+0

Tôi đã thử tên tệp có và không có '. \' Với kết quả tương tự (có nghĩa là, không có). NLog.config được triển khai vào thư mục ứng dụng. Sẽ thử đăng nhập nội bộ ngay bây giờ. – Srv19

+0

Theo liên kết bạn đã cung cấp, tôi đã tìm hiểu giải pháp. Cảm ơn rất nhiều. – Srv19

Trả lời

17

Tệp nhật ký đã được tạo - nhưng không phải trong thư mục ứng dụng.

Sử dụng ${basedir} trình kết xuất bố cục như một phần của tên tệp được chứng minh là giải pháp.

+0

Liên kết của bạn không hoạt động .. Xin vui lòng sửa chữa nó. –

+2

Cảm ơn bạn. Sửa lỗi. – Srv19

+0

Hmm lạ. Điều này cố định nó cho tôi, nhưng tôi có một ứng dụng khác mà điều này không phải được chỉ định (và đầu ra vẫn hoạt động) – Jowen

11

Trong trường hợp phản ứng đánh dấu là câu trả lời không phải là tất cả những gì rõ ràng bạn có thể kiểm tra ví dụ

<targets> 
    <target xsi:type="Console" name="console" 
    layout="${longdate}|${level}|${message}" /> 
    <target xsi:type="File" name="ErrorLog" fileName="${basedir}/error.txt" 
      layout="${longdate} 
      Trace: ${stacktrace} 
      ${message}" /> 
    <target xsi:type="File" name="AccessLog" fileName="${basedir}/access.txt" 
      layout="${shortdate} | ${message}" /> 
</targets> 

Taken từ đây using AppData location in NLog

7

Tôi có vấn đề này bật ra rằng tập tin đăng nhập của tôi đã không được sao chép vào thư mục xây dựng của tôi. Trang NLog github có câu trả lời. (Tôi đã định dạng lại đoạn văn một chút để dễ đọc hơn.) https://github.com/NLog/NLog/wiki/Logging-troubleshooting

NLog không thể tìm thấy tệp cấu hình. Điều này có thể xảy ra khi tệp NLog.config được cấu hình với Build Action = None hoặc Copy to Output Directory = Không sao chép trong Visual Studio.

Set Build Action = Nội dung và "Sao chép vào Output directory = Sao chép nếu mới hơn để sửa lỗi này)

+0

Cảm ơn. Cài đặt "Không sao chép" là vấn đề. – joshmcode

0

Từ hướng dẫn gỡ rối nlog:

https://github.com/NLog/NLog/wiki/Logging-troubleshooting

Nếu bạn biết rằng tập tin cấu hình của bạn là chắc chắn đang được tìm thấy, tạm thời thay thế phần của tập tin NLog.config của bạn bằng cách sau và thử nó

Quy tắc này sẽ khớp với bất kỳ logger nào bạn đã tạo, và nếu nó hoạt động, nó sẽ đặt một log.tx t tệp trong 'thư mục cơ sở' - đó là thư mục 'bin' cho ví dụ thử nghiệm của bạn ví dụ: nếu bạn đang chạy trong chế độ gỡ lỗi, bạn sẽ thấy log.txt trong thùng rác của bạn> thư mục gỡ lỗi. (Điều này không được giải thích rõ ràng trong hướng dẫn khắc phục sự cố).

Nếu đây làm việc thì bạn biết rằng vấn đề là với các quy tắc của bạn:

<nlog throwExceptions="true"> 
    <targets> 
    <target name="file" type="File" fileName="${basedir}/log.txt" /> 
    </targets> 
    <rules> 
    <logger name="*" minLevel="Trace" writeTo="file" /> 
    </rules> 
</nlog> 

tôi thấy rằng chỉ name = "file" làm việc cho mục tiêu - giá trị còn lại thì không

Thêm throwExceptions = "true" như trên cũng sẽ đảm bảo rằng bạn nhận được thông báo lỗi hữu ích khi bạn đang gỡ lỗi.

0

Trong trường hợp của tôi, tôi đã bỏ lỡ các quy tắc sau xác định các quy tắc hoạt động giống như một nét duyên dáng

<rules> 
    <logger name="*" minlevel="Trace" writeTo="logfile" /> 
    <!-- add your logging rules here --> 

    <!-- 
    Write all events with minimal level of Debug (So Debug, Info, Warn, Error and Fatal, but not Trace) to "f" 
    <logger name="*" minlevel="Debug" writeTo="f" /> 
    --> 
    </rules> 
Các vấn đề liên quan