Domanda

Questo è il mio file di configurazione log4net

<?xml version="1.0" encoding="utf-8" ?>
<log4net debug="true">
  <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender" >
    <filter type="log4net.Filter.LevelRangeFilter">
      <acceptOnMatch value="true" />
      <levelMin value="DEBUG" />
      <levelMax value="FATAL" />
    </filter>
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%-5p %5rms [%-17.17t] %-22.22c{1} %-18.18M - %m%n" />
    </layout>
  </appender>

  <appender name="SmtpAppender" type="MySmtpClientSmtpAppender">
    <to value="a@a.com" />
    <from value="admin@x.com" />
    <subject value="Game Server Monitoring Failed!" />
    <smtpHost value="smtp.x.com" />
    <username value="admin" />
    <password value="x" />
    <bufferSize value="256" />
    <lossy value="true" />
    <evaluator type="log4net.spi.LevelEvaluator">
      <threshold value="ERROR" />
    </evaluator>
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%-5p %d [ThreadId: %t] Class:%c{1} Method:%M %nMESSAGE:%n%m%n%n" />
    </layout>
  </appender>

  <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
    <file value="Logs\\wwwlog" />
    <appendToFile value="true" />
    <datePattern value="yyyyMMdd" />
    <maximumFileSize value="10MB" />
    <!--<rollingStyle value="Date" />-->
    <filter type="log4net.Filter.LevelRangeFilter">
      <acceptOnMatch value="true" />
      <levelMin value="INFO" />
      <levelMax value="FATAL" />
    </filter>
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date [%thread] %-5level %logger [%ndc] - %message%newline" />
    </layout>
  </appender>


  <root>
    <level value="DEBUG" />
    <appender-ref ref="ConsoleAppender" />
    <appender-ref ref="MySmtpAppender" />
    <appender-ref ref="RollingLogFileAppender" />
  </root>
</log4net>

Mi manca qualcosa? Qualche consiglio / consiglio per ridurre le dimensioni del registro mantenendo la chiarezza e migliori schemi di conversione? Qualche hack interessante?

Modifica: il file XMl non è entrato nel blocco di codice. Aggiornamento. Qualche suggerimento?

È stato utile?

Soluzione

Un suggerimento per RollingLogFileAppender è di utilizzare il minimo LockModel. Con questa impostazione il file di registro non è bloccato, ma viene aperto e quindi chiuso per ogni scrittura.

<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />

Altri suggerimenti

Nessuno ha menzionato la codifica. È piuttosto importante se stai registrando messaggi in cinese, giapponese, arabo o qualsiasi lingua a doppio byte. Ecco un esempio:

<appender name="RollingFile" type="log4net.Appender.RollingFileAppender">
  <encoding value="utf-8" />
  <!-- etc. -->
</appender>

Per la registrazione con colori diversi quando viene visualizzato sulla console in base al livello del messaggio (debug, informazioni, errore o fatale). Il secondo appender deve salvarlo su un file:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
   <configSections>
     <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
   </configSections>

<log4net debug="false">
  <appender name="trace" type="log4net.Appender.TraceAppender, log4net">
    <layout type="log4net.Layout.PatternLayout,log4net">
      <param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" />
    </layout>
  </appender>

 <appender name="ColoredConsoleAppender" type="log4net.Appender.ColoredConsoleAppender,log4net">
   <mapping>
    <level value="ERROR" />
    <foreColor value="White" />
    <backColor value="Red" />
  </mapping>
  <mapping>
    <level value="DEBUG" />
    <foreColor value="White" />
  </mapping>
  <mapping>
    <level value="INFO" />
    <foreColor value="Green" />
  </mapping>

  <layout type="log4net.Layout.PatternLayout">
    <param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" />
  </layout>
</appender>

<appender name="RollingFile" type="log4net.Appender.RollingFileAppender,log4net" >
  <param name="File" value="Logs/NSCurrent.log" />
  <param name="AppendToFile" value="true" />
  <param name="RollingStyle" value="Date" />
  <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
  <datePattern value="yyyy-MM-dd" />
  <layout type="log4net.Layout.PatternLayout,log4net">
    <param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" />
  </layout>
</appender>

  <root>
    <priority value="DEBUG" />
    <appender-ref ref="RollingFile" />
    <appender-ref ref="ColoredConsoleAppender" />
  </root>
 </log4net>
 </configuration>

Per ridurre le dimensioni del file di registro, puoi provare a modificare il ConversionPattern:

ecco il formato che uso:

  <layout type="log4net.Layout.PatternLayout,log4net">
    <!-- a reduced format, saves bit of log space: -->
    <param name="ConversionPattern" value="%date{MM/dd HH:mm:ss,fff}-{%level}-%message%newline"/>
  </layout>

prima

2012-06-05 10: 58: 40.819 [1] INFO La mia app [(null)] - La mia app - === stella ting ....

DOPO:

06/05 11: 17: 29.151- {INFO} -La mia app - === inizio ...

nota: la documentazione di Apache sembra essere errata per log4net - come si dice per usare SSS per millisecondi, mentre log4net usa fff

Un piccolo risparmio per riga potrebbe fare una grande differenza nel complesso :)

Eseguo una configurazione log4net piuttosto minimale e preferisco usare il formato XML, ma una cosa che suggerirei di aggiungere (per le app Web) è l'appender di traccia ASP.NET. Devi semplicemente aggiungere quanto segue:

<appender name="AspNetTraceAppender" type="log4net.Appender.AspNetTraceAppender" >
   <layout type="log4net.Layout.PatternLayout" />
</appender>

Quindi giù nel tuo logger di root, o ovunque tu decida di attivarlo:

<root>
   <level value="WARN" />
   <appender-ref ref="XmlSchemaFileAppender" />
   <appender-ref ref="AspNetTraceAppender" />
</root>

Questo mi consente di riunire tutti i miei dati di debug pertinenti su un'unica pagina quando eseguo il debug di alcuni dettagli ASP.NET minuti. La maggior parte delle volte ho commentato l'appender di traccia ASP.NET per disabilitarlo, ma mi ha davvero aiutato in alcuni casi, specialmente quando stai cercando di capire quale particolare metodo di postback del server sta causando il blocco della tua app .

Questo potrebbe aiutare un po ', a seconda di quanto siano simili log4j e log4net, penso che siano basati sulla stessa specifica, ma non lo so per certo.

Beh, non posso dirti cosa ho nella mia configurazione log4net, ma posso dirti cosa ho nella mia configurazione log4j se è abbastanza buono ...

<?xml version="1.0" encoding="UTF-8"?>
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">

    <!--
    <appender name="CHAINSAW_APPENDER"
            class="org.apache.log4j.net.SocketAppender">
        <param name="RemoteHost" value="localhost" />
        <param name="Port" value="4445" />
        <param name="LocationInfo" value="true"/>
        <param name="ReconnectionDelay" value="10000"/>
    </appender>
    -->

    <appender name="FILE_APPENDER"
        class="org.apache.log4j.RollingFileAppender">
        <param name="File" value="c:/dev/logs/OSB.log" />
        <param name="Append" value="true" />
         <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d [%t] %-5p [[[[%c]]]] (((%F:%L))) ___%C___ - %m%n"/>
            </layout>
    </appender>

    <logger name="org.apache">
        <level value="WARN"/>
    </logger>

    <!--
    <logger name="com.conciliarpress.webapp.filter.GZIPFilte">
        <level value="WARN"/>
    </logger>

    <logger name="com.conciliarpress">
        <level value="DEBUG"/>
    </logger>

    <logger name="BibleFormControllerTest">
        <level value="DEBUG"/>
    </logger>

    <logger name="com.conciliarpress.webapp.action.sample.jmesa.JMesaSampleController">
        <level value="DEBUG"/>
    </logger>

    <logger name="com.conciliarpress.webapp.action.binding">
        <level value="DEBUG"/>
    </logger>

    <logger name="org.springframework.web.servlet.mvc">
        <level value="DEBUG"/>
    </logger>

    <logger name="org.directwebremoting">
        <level value="DEBUG"/>
    </logger>

    <logger name="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
        <level value="DEBUG"/>
    </logger>

    -->

    <logger name="com.conciliarpress.dao.hibernate">
        <level value="DEBUG"/>
    </logger>

    <logger name="com.conciliarpress.service.impl">
        <level value="DEBUG"/>
    </logger>

    <logger name="com.conciliarpress.service.dwr">
        <level value="DEBUG"/>
    </logger>

    <logger name="com.conciliarpress.webapp.action">
        <level value="DEBUG" />
    </logger>

    <root>
        <level value="WARN" />
        <appender-ref ref="FILE_APPENDER"/>
    </root>

</log4j:configuration>

Inoltre ho un file di configurazione della motosega corrispondente:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration PUBLIC "-//log4j/log4j Configuration//EN" "log4j.dtd"> 
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="true">
   <plugin name="logFileReceiver" class="org.apache.log4j.varia.LogFilePatternReceiver">
     <param name="fileURL" value="file:///c:/dev/logs/OSB.log" />
     <param name="timestampFormat" value="yyyy-MM-d HH:mm:ss,SSS"/> 
     <param name="logFormat" value="TIMESTAMP [THREAD] LEVEL [[[[LOGGER]]]] (((FILE:LINE))) ___CLASS___ - MESSAGE"/> 
     <param name="name" value="DLA_M_LogFile" />
     <param name="tailing" value="true" /> 
   </plugin>

   <root>
      <level value="debug"/>
   </root>
</log4j:configuration>

Anche qui ci sono alcune informazioni che possono aiutarti a decifrare quest'ultimo file:

scroll top