2011-12-28 23 views
24

che sto usando log4net a mio progetto ASP.NET MVC3, ma tutta la registrazione proprietà quali IsDebugEnabled == falsePerché tutti i miei livelli log4net sono falsi?

Nel mio AssemblyInfo devo:

[assembly: XmlConfigurator(Watch = true)] 

In mia classe di log ho

public Log4NetLogger() 
{ 
    log4net.Config.XmlConfigurator.Configure(); 
    Logger = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); 
} 

mia roba di configurazione relativo nel web.config è:

<?xml version="1.0" encoding="utf-8"?> 
<!-- 
    For more information on how to configure your ASP.NET application, please visit 
    http://go.microsoft.com/fwlink/?LinkId=152368 
    --> 
<configuration> 
    <configSections> 
    <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> 
     <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" requirePermission="false"/> 
     </sectionGroup> 
    </configSections> 

    <log4net debug="false"> 
     <appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender"> 
     <bufferSize value="100" /> 
     <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> 
     <connectionString value="{removed}" /> 
     <commandText value="INSERT INTO Logging ([Date],[Thread],[Level],[Logger],[Message],[Exception]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)" /> 
     <parameter> 
      <parameterName value="@log_date" /> 
      <dbType value="DateTime" /> 
      <layout type="log4net.Layout.RawTimeStampLayout" /> 
     </parameter> 
     <parameter> 
      <parameterName value="@thread" /> 
      <dbType value="String" /> 
      <size value="255" /> 
      <layout type="log4net.Layout.PatternLayout"> 
      <conversionPattern value="%thread" /> 
      </layout> 
     </parameter> 
     <parameter> 
      <parameterName value="@log_level" /> 
      <dbType value="String" /> 
      <size value="50" /> 
      <layout type="log4net.Layout.PatternLayout"> 
      <conversionPattern value="%level" /> 
      </layout> 
     </parameter> 
     <parameter> 
      <parameterName value="@logger" /> 
      <dbType value="String" /> 
      <size value="255" /> 
      <layout type="log4net.Layout.PatternLayout"> 
      <conversionPattern value="%logger" /> 
      </layout> 
     </parameter> 
     <parameter> 
      <parameterName value="@message" /> 
      <dbType value="String" /> 
      <size value="4000" /> 
      <layout type="log4net.Layout.PatternLayout"> 
      <conversionPattern value="%message" /> 
      </layout> 
     </parameter> 
     <parameter> 
      <parameterName value="@exception" /> 
      <dbType value="String" /> 
      <size value="2000" /> 
      <layout type="log4net.Layout.ExceptionLayout" /> 
     </parameter> 
     </appender> 
     <!--Possible levels:--> 
     <!--DEBUG--> 
     <!--INFO--> 
     <!--WARN--> 
     <!--ERROR--> 
     <!--FATAL--> 
     <root> 
     <level value="All" /> 
     <appender-ref ref="AdoNetAppender" /> 
     </root> 
    </log4net> 

    </applicationSettings> 

</configuration> 

ho già preso frustrato ad un punto di solo voler fare

public Log4NetLogger() 
{ 
    Logger = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); 


    Logger.IsDebugEnabled = true; 
} 

Tuttavia, naturalmente Logger.IsDebugEnabled non ha una setter:/

Che cosa devo fare per ottenere questa cosa maledetta per lavorare?

+0

Puoi approvare una delle risposte qui sotto se hai risolto questo problema? –

risposta

2

Non ho mai visto <level value="All" /> prima, di solito ho appena impostato value su uno dei livelli (dal momento che sono compresi i livelli sopra di loro, o sotto di loro come li hai elencati nella tua configurazione, nella pila dei livelli). Qualcosa di simile a questo:

<level value="DEBUG" /> 

Si potrebbe anche provare il test con un registratore esplicito, solo per vedere se il problema potrebbe essere qualcos'altro. Qualcosa di semplice adiacente al nodo appender (s) in questo modo:

<logger name="Log4NetTEST" > 
    <level value="DEBUG" /> 
    <appender-ref ref="AdoNetAppender" /> 
</logger> 

Poi, quando il test nel codice devi creare il registratore in questo modo:

LogManager.GetLogger("Log4NetTEST"); 
+2

Sto usando '' con successo da anni :-) –

+2

fwiw: I possibili valori per Log4Net sono: ALL, DEBUG, INFO, WARN, ERROR, FATAL, OFF. Ricorda, anche questi sono case sensitive. –

6

Log4net aspetta la sua sezione di configurazione non essere raggruppati Perché nella tua configurazione hai inserito la tua sezione log4net in un ApplicationSettingsGroup (applicationSettings) log4net non troverà la sua configurazione. È possibile spostare la sezione log4net al di fuori del gruppo oppure è possibile specificare il gruppo al momento della chiamata XmlConfigurator.Configure:

XmlConfigurator.Configure(
    ConfigurationManager.GetSection(
     "applicationSettings/log4net") as XmlElement); 
+0

Incredibile correzione! Questo mi stava anche spaccando !!!! – nterry

3

livelli di log sono case-sensitive, così invece di:

<level value="All" />

dovrebbe essere

<level value="ALL" />

Trovo anche molto più facile per creare un conf log4net separata file di configurazione. Creare un file chiamato log4net.config e impostare la proprietà di Copia nella directory di output-Copia sempre - (copiare la configurazione da App.config in questo file)

Poi, quando si imposta l'uso di configurazione:

XmlConfigurator.Configure(new System.IO.FileInfo("log4net.config"));

23

ho avuto questo stesso problema. Lo aggiro usando la linea di codice sottostante nel metodo Application_Start nel Global.asax.cs (assumendo il suo a.applicazione web Net)

log4net.Config.XmlConfigurator.Configure(); 
16

cambiare linea per segue in AssemblyInfo.cs:

[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)] 

e mettere la configurazione di log4net in quel file.

0

Non v'è Setter per IsDebugEnabled come si legge solo ..

Usa log4net.Config.XmlConfigurator.Configure(); in qualsiasi metodo prima di utilizzare il login

e nel app.config l'impostazione dovrebbe essere:

<root> 
     <level value="ALL" /> 
     <appender-ref ref="AppenderName" /> 
    </root> 
0

cambiare linea per segue in AssemblyInfo.cs:

[assembly: log4net.Config.XmlConfigurator (Guarda = true)]

Assicurarsi log4net dll viene aggiunto e anche mettere la configurazione di log4net nel file web.config come

<configuration> 
    <configSections> 
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler" /> 
    </configSections> 
    <log4net> 
    <root> 
     <level value="DEBUG" /> 
     <appender-ref ref="RollingFileAppender" /> 
    </root> 
    <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender"> 
     <file value="C:\LOGS\IDMUserRoleManagement\IDMUserRoleManagement.txt" /> 
     <appendToFile value="true" /> 
     <rollingStyle value="Size" /> 
     <maxSizeRollBackups value="5" /> 
     <maximumFileSize value="1000KB" /> 
     <staticLogFileName value="true" /> 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%d{yyyy-MM-ddTHH:mm:ss} %-5p [%t] - %m%n" /> 
     </layout> 
    </appender> 
    </log4net> 
</configuration> 
2

Sembra che manchi le modifiche alle impostazioni della proprietà del file di configurazione Copia nella directory di output = "Copia sempre" Controllare questa immagine di impostazione per ulteriori dettagli. Config file setting Properties

0

Ti manca l'etichetta di apertura per applicationSettings. Questo potrebbe essere la causa

0

se il file di registro di classe (Log4NetLogger) è in una libreria di classi da solo, quindi il codice: [assembly: log4net.Config.XmlConfigurator (C .... dovrebbe essere nella stessa libreria di classi .

ad esempio: lib 1: my.web (un progetto MVC) lib 2: my.common (un progetto di libreria di classi)

se si avvolge il codice logmanager in my.common, poi "[ assembly: log4net.Config.XmlConfigurator (C ... "DOVREBBE ESSERE IN my.common, se lo metti in my.web, non funzionerà!

Problemi correlati