2009-12-24 18 views
11

Sto utilizzando NLog per registrare le eccezioni nell'applicazione asp.net mvc (C#).NLog non funziona in modalità di rilascio

NLog non funziona in modalità di rilascio. Lo stesso funziona quando si esegue in modalità di debug.

Quale potrebbe essere il problema? C'è qualche soluzione per questo?

+0

Il file di configurazione nlog è incluso nella versione di rilascio? – curtisk

+0

esiste in entrambe le modalità. – Prasad

+0

Quindi, se si esegue sia localmente (cioè, premendo ctrl-f5), fallisce nel rilascio? Stai riscontrando errori? –

risposta

1

istituiti variabili d'ambiente: NLOG_INTERNAL_LOG_LEVEL e NLOG_INTERNAL_LOG_FILE, eseguire nuovamente la vostra build di rilascio quindi controllare il file di log vedere che cosa c'è che non va

+0

Ho provato questo, ma senza dadi. Funziona localmente in modalità di debug, ma quando eseguo la distribuzione in modalità di rilascio, anche la registrazione interna non funziona. Sono abbastanza sicuro che le mie autorizzazioni siano sufficienti. –

3

ho avuto lo stesso problema, come si:

  • ASP.NET MVC 3
  • .NET 4
  • IIS 7
  • modalità di uscita

Ho provato a cambiare directory e a modificare le autorizzazioni inutilmente. Ho persino provato a abilitare il logging interno, ma anche quello non ha funzionato! Nessun fallimento, nessuna eccezione, niente!

Dopo aver fatto altre ricerche, ho trovato la soluzione. Per qualche motivo, NLog non stava caricando il file di configurazione A TUTTI. L'ho capito dopo aver abilitato a livello di programmazione la registrazione interna. Il logging interno riportava questo:

2012-02-13 11:34:40.3181 Debug Targets for MyMvcController by level: 
2012-02-13 11:34:40.3181 Debug Trace => 
2012-02-13 11:34:40.3181 Debug Debug => 
2012-02-13 11:34:40.3181 Debug Info => 
2012-02-13 11:34:40.3181 Debug Warn => 
2012-02-13 11:34:40.3181 Debug Error => 
2012-02-13 11:34:40.3181 Debug Fatal => 

In pratica si diceva che non c'erano obiettivi definiti per nessuno dei livelli di registro! Sicuramente non è corretto!

file di configurazione Il NLog era così semplice come potrebbe essere (ed è stato impostato su Copia nella rubrica Output):

<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" autoReload="true" throwExceptions="true"> 
    <targets> 
    <target name="file" xsi:type="File" fileName="${basedir}/MyApplication.log" /> 
    </targets> 
    <rules> 
    <logger name="*" minlevel="Trace" writeTo="file" /> 
    </rules> 
</nlog> 

io non sono ancora sicuro esattamente il motivo per cui questo stava accadendo, ma in movimento la configurazione di NLog nel web.config risolve direttamente il problema.

+0

Ho fatto questo, e ora dice che il file web.config non è valido – Tuco

+0

@Tuco Che aspetto ha la tua configurazione ora? –

+0

Ignora che funzioni adesso, forse dovresti menzionare che è necessaria una dichiarazione di sezione https://gist.github.com/kishorejangid/4004715 – Tuco

0

Trasferisci nlog config al file di configurazione dell'applicazione (web.config ad esempio) e riprova.

0

Assicurarsi che il file di destinazione venga salvato all'interno di una cartella "/ logs /". Vedi sotto

<target xsi:type="File" name="f" fileName="${basedir}/logs/${shortdate}.log" 
      layout="${longdate} ${uppercase:${level}} ${message}" /> 

ho cercato di accedere al "root/log.log" e non funzionava, poi ha cercato "root/logs/log.log" e ha lavorato

Sotto file completo di configurazione.

<?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" 
     xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd" 
     autoReload="true" 
     throwExceptions="false" 
     internalLogLevel="Off" internalLogFile="c:\temp\nlog-internal.log" > 


    <!-- optional, add some variabeles 
    https://github.com/nlog/NLog/wiki/Configuration-file#variables 
    --> 
    <variable name="myvar" value="myvalue"/> 

    <!-- 
    See https://github.com/nlog/nlog/wiki/Configuration-file 
    for information on customizing logging rules and outputs. 
    --> 
    <targets> 

    <!-- 
    add your targets here 
    See https://github.com/nlog/NLog/wiki/Targets for possible targets. 
    See https://github.com/nlog/NLog/wiki/Layout-Renderers for the possible layout renderers. 
    --> 

    <!-- 
    Writing events to the a file with the date in the filename. --> 
    <target xsi:type="File" name="f" fileName="${basedir}/logs/${shortdate}.log" 
      layout="${longdate} ${uppercase:${level}} ${message}" /> 

    </targets> 

    <rules> 
    <!-- 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> 
</nlog> 
0

Ho seguito tutte le altre risposte ma non ha funzionato. Così ho provato quanto segue e ha funzionato.

prima di chiamare o dopo aver chiamato LogManager.GetCurrentClassLogger(); .. Ho chiamato LogManager.Configuration.

i.e

#region Constructor 

public LoggerService() 
{ 
    var configuration = LogManager.Configuration; 
    _logger = LogManager.GetCurrentClassLogger(); 
    //var configuration = LogManager.Configuration; 
} 

#endregion Constructor 

FYI: io non ha fatto nulla con la configurazione. L'ho appena chiamato.

Il motivo per cui ha funzionato, come gli altri stanno dicendo, "Io DON" T sapere perché "

0

Per chiunque, che non è sicuro 'perché nun collegamento non funziona in ambiente prod':!

  1. Vai Nlog.config il file
  2. throwExceptions SET = "true " in nlog tag e avviare il debug di errori corretti.

Buona fortuna.

Problemi correlati