2012-05-11 20 views
14

Próbuję dodać logowanie do aplikacji uruchomionej na urządzeniu mobilnym z systemem Windows Mobile 6.1. .NET Compact framework 3.5. używając NLog.NLog nie tworzy pliku dziennika

Mam zainstalowaną odpowiednią wersję dystrybucji NLog.

Jednak nie są tworzone żadne pliki dziennika.

Oto mój plik NLog.config.

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

Oto kod testowy, którego używałem.

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

Czy eksperymentował z różnymi Nazwa pliku/ścieżki? E.g 'fileName =" Neolant.ASRM.Terminal.log "' bez '. \\'? Nlog.Config znajduje się w katalogu aplikacji? Dodatkowo możesz włączyć dziennik wewnętrzny [Nlog] (http://nlog-project.org/wiki/Logging_is_not_working_-_how_to_troubleshoot_it%3F), aby uzyskać dodatkowe informacje o swoim problemie. – nemesv

+0

I hace próbował nazwy pliku zi bez ". \" Z podobnymi (to znaczy bez) wynikami. NLog.config jest wdrażany w katalogu aplikacji. Teraz spróbuję wewnętrznego logowania. – Srv19

+0

Po podanym łączu natknąłem się na rozwiązanie. Wielkie dzięki. – Srv19

Odpowiedz

17

Plik dziennika był tworzony - ale nie w katalogu aplikacji.

Stosowanie renderera układu jako części nazwy pliku okazało się rozwiązaniem.

+0

Twój link nie działa. Pls napraw to. –

+2

Dziękuję. Naprawione. – Srv19

+0

Hmm dziwne. Naprawiono to dla mnie, ale mam inną aplikację, w której to nie musi być określone (a wyjście nadal działa). – Jowen

11

W przypadku odpowiedzi oznaczone jako odpowiedź nie jest tak jasne, można sprawdzić na przykładzie

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

Zrobione stąd using AppData location in NLog

7

miałem ten problem, okazało się, że mój plik dziennika nie był kopiowany do mojego katalogu kompilacji. Strona z github NLog miała odpowiedź. (Zmieniono sformatowanie akapitu dla lepszej czytelności.) https://github.com/NLog/NLog/wiki/Logging-troubleshooting

NLog nie może znaleźć pliku konfiguracyjnego. Może się to zdarzyć, gdy plik NLog.config jest skonfigurowany z Build Action = None lub Copy to Output Directory = Nie kopiuj w Visual Studio.

Set Budowa Action = Content i „Copy to Output directory = Copy jeśli nowsze to naprawić)

+0

Dzięki. Ustawienie "Nie kopiuj" było problemem. – joshmcode

0

Z nlog przewodnika rozwiązywania problemów:

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

Jeśli wiesz, że plik konfiguracyjny jest na pewno zostanie znaleziony, tymczasowo zamień sekcję pliku NLog.config na poniższe i wypróbuj ją:

Ta reguła będzie pasować do dowolnego utworzonego programu rejestrującego, a jeśli zadziała, zostanie umieszczony plik log.tx t plik w "katalogu podstawowym" - który jest katalogiem "bin" dla instancji testowej, np., np. jeśli używasz trybu debugowania, zobaczysz plik log.txt w folderze bin> debug. (Nie jest to wyjaśnione bardzo wyraźnie w przewodniku rozwiązywania problemów).

Jeśli to zadziała, to wiesz, że problem jest ze swoich zasad:

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

Okazało się, że tylko name = „file” pracował dla targetu - inne wartości nie

Dodanie throwExceptions = "true" jak powyżej zapewni również, że podczas debugowania otrzymasz przydatne komunikaty o błędach.

0

W moim przypadku, Tęskniłam reguły po zdefiniowaniu reguły działa jak czar

<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> 
Powiązane problemy