2009-08-10 15 views
5

domanda molto semplice -> Non riesco a ottenere alcun dato da Log4Net nella mia applicazione ASP.NET. Ho un semplice ASP.NET sito web, che fa riferimento a una libreria di classi. in questo libreria di classi, ho alcune linee che chiamano il registratore.Impossibile accedere a Log4Net sul mio sito Web ASP.NET :(

sto cercando di leggere i dati di uscita log4net nel mio Visual Studio 2008 di debug uscita finestra.

Ecco il mio codice e la mia configurazione ...

//Class Library project 
//File: Foo.cs 
public class FooService 
{ 
    private static readonly ILog log = LogManager.GetLogger(typeof(FooService)); 

    public FooService() 
    { 
     // NOTE: To play with my L4N settings, I'll call Debug once, then Info once. 

     log.Info("Starting Constructor"); 

     // ... snip ... 

     log.Debug("Leaving Constructor"); 
    } 
} 


// ASP.NET Website project 
// File: global.asax 
void Application_Start(object sender, EventArgs eventArgs) 
{ 
    log4net.Config.XmlConfigurator.Configure(); 
} 

// File: Whatever.aspx.cs 
// A delegate method (when a user clicks a button) creates the FooService() instance. 

// File: web.config 
<configSections> 
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler" requirePermission="false" /> 

    // .... 

</configSections> 


<log4net> 
    <appender name="ColoredConsoleAppender" type="log4net.Appender.ColoredConsoleAppender"> 
     <mapping> 
      <level value="ERROR" /> 
      <foreColor value="White" /> 
      <backColor value="Red, HighIntensity" /> 
     </mapping> 
     <mapping> 
      <level value="DEBUG" /> 
      <backColor value="Green" /> 
     </mapping> 
     <layout type="log4net.Layout.PatternLayout"> 
      <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> 
     </layout> 
    </appender> 

    <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender"> 
     <layout type="log4net.Layout.PatternLayout" value="%date [%thread] %-5level %logger - %message%newline" /> 
    </appender> 

    <appender name="OutputDebugStringAppender" type="log4net.Appender.OutputDebugStringAppender"> 
     <mapping> 
      <level value="ERROR" /> 
      <foreColor value="White" /> 
      <backColor value="Red, HighIntensity" /> 
     </mapping> 
     <mapping> 
      <level value="DEBUG" /> 
      <backColor value="Blue" /> 
     </mapping> 
     <layout type="log4net.Layout.PatternLayout"> 
      <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> 
     </layout> 
    </appender> 


    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender"> 
     <file value="App_Data\logging\log-append.txt"/> 
    </appender> 

    <!-- Setup the root category, add the appenders and set the default level --> 
    <root> 
     <level value="ALL" /> 
     <appender-ref ref="OutputDebugStringAppender" /> 
     <appender-ref ref="ConsoleAppender" /> 
     <appender-ref ref="ColoredConsoleAppender" /> 
    </root> 
    <!-- Specify the level for some specific categories --> 
    <logger name="DotNetOpenAuth"> 
     <level value="ALL" /> 
    </logger> 
</log4net> 

Cheers per qualsiasi aiuto o suggerimento ...

MODIFICA: Aggiunto il RollingLogFileAppender.

+0

Perché stai usando ColorConsoleAppender in un'app Web? – RichardOD

+0

'Cause spero che console.out venga reindirizzato a questa strana finestra di Debugger Output .... –

risposta

5

Ho avuto lo stesso problema e penso che stia guardando al web.config sbagliato o qualcosa del genere. Alla fine ho separato log4net.config da web.config e ne ho inserito un percorso \ inetpub \ Logs \ log4net.config e tutto va bene.

UDPATED SU RICHIESTA: modificato da una versione leggermente più complicata.

<?xml version="1.0" encoding="utf-8"?> 
<log4net> 
    <appender name="TraceAppender" type="log4net.Appender.TraceAppender"> 
     <layout type="log4net.Layout.PatternLayout"> 
      <conversionPattern value="%date [%thread] %-5level (%logger:%line) - %message%newline" /> 
     </layout> 
    </appender>\ 

    <root> 
     <!--ALL, DEBUG, INFO, WARN, ERROR, FATAL, OFF--> 
     <level value="ALL" /> 
     <appender-ref ref="TraceAppender" /> 
    </root> 
</log4net> 

ed è configurato in codice come segue:

 var logpath = WebConfigurationManager.AppSettings["LogConfigPath"] ?? @"\Inetpub\Logs\log4net.config"; 
     var finfo = new System.IO.FileInfo (logpath); 
     XmlConfigurator.Configure(finfo); 
+0

tizio - ha u finiscono per accedere al finestra di Visual Studio (debugger) OUTPUT? o in un file? –

+0

sì, sto usando TraceAppender con va alla funzione OutputDebugString e lo vedo in VS o con http://technet.microsoft.com/en-us/sysinternals/bb896647.aspx – kenny

+0

wow. che l'app di sysinternals è fantastica :) mi piacciono le cose e qui c'è un'altra cosa di compromesso :) Potresti per favore elaborare in dettaglio (ad esempio, pubblicare una schermata delle impostazioni del tuo file .config log4net), per favore? –

5

ASP.Net ha restrizione sull'uso di accesso al filesystem, quindi cercate di puntare in modo esplicito directory sotto App_Data (erano è permesso) Ecco il mio campione di lavoro:

<log4net> 
    <appender name="FileAppender" type="log4net.Appender.FileAppender"> 
     <file value="App_Data\logging\log-file.txt"/> 

O con rollover

<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender"> 
     <file value="App_Data\logging\log-append.txt"/> 
+0

Heh - dude. Non ho mai detto che sto usando il file system :) vai a guardare di nuovo ..... –

+0

Basta provare questo esempio funzionante, dopo di che potresti separare la configurazione non funzionante dalla sicurezza non sintonizzata. – Dewfy

+0

ok .. darò un passaggio ... hmm. alcuni errori nella finestra OUTPUT ... og4net: ERROR XmlHierarchyConfigurator: non è stato trovato alcun appender chiamato [RollingFileAppender]. log4net: ERRORE XmlHierarchyConfigurator: Appender denominato [RollingFileAppender] non trovato. log4net: ERRORE XmlHierarchyConfigurator: Impossibile trovare proprietà [mapping] per impostare oggetto [log4net.Appender.OutputDebugStringAppender] log4net: ERRORE XmlHierarchyConfigurator: Impossibile trovare proprietà [mapping] per impostare oggetto [log4net.Appender.OutputDebugStringAppender] –

0

Ci sono almeno 2 problemi possibili:

  • Il modo viene specificato l'indirizzo del file, provare a utilizzare un assoluto percorso invece.
  • Il processo che effettua la chiamata richiede i diritti per modificare il file. Verificare che l'account utente che sta scrivendo sul file di registro abbia i diritti per farlo.

Per eseguire il debug vorrei creare e svuotare la directory, dare a tutti il ​​controllo completo, configurare per accedere a tale directory. Quindi testalo, verifica che funzioni, quindi stringi gradualmente la sicurezza a un livello accettabile.

3

Ok, ho trovato la risposta. Avevo bisogno di usare uno TraceAppender. file di configurazione

L'applicazione può essere utilizzato per controllare ciò che gli ascoltatori vengono effettivamente utilizzati. Consultare la documentazione MSDN per la classe Trace per informazioni su sulla configurazione del sistema di traccia .

Gli eventi vengono scritti utilizzando il metodo System.Diagnostics.Trace.Write (stringa, stringa) . Il nome del logger dell'evento è passato come valore per il nome della categoria nel metodo Write.

Ecco i miei dati file di configurazione ...

<log4net> 
    <appender name="TraceAppender" type="log4net.Appender.TraceAppender"> 
     <layout type="log4net.Layout.PatternLayout"> 
      <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> 
     </layout> 
    </appender> 


    <!-- Setup the root category, add the appenders and set the default level --> 
    <root> 
     <level value="ALL" /> 
     <appender-ref ref="TraceAppender" /> 
    </root> 
</log4net> 
+0

+ 1- come hai detto, funziona! – RichardOD

0

ho aggiunto il file Global.asax seguente riga e funziona .. !! log4net.Config.XmlConfigurator.Configure();

+1

Ehm ... l'avevo già elencato nel mio post di apertura. Detto questo, ho perso l'uso di Log4Net e ora sto usando NLog .. è SOOOO molto meglio IMO :) E ha sempre funzionato (in più è più recente e sta ancora diventando lo sviluppo-amore). –

Problemi correlati