2009-03-06 9 views
15

Este es mi archivo de configuración de log4net¿Qué tienes en tu configuración de log4net? Hacks, optimizaciones, observaciones?

<?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="[email protected]" /> 
    <from value="[email protected]" /> 
    <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> 

Me estoy perdiendo algo? ¿Alguna sugerencia/consejo para disminuir el tamaño del registro mientras se mantiene la claridad, mejores patrones de conversión? ¿Algún hackeo interesante?

Editar: El archivo XMl no entró en el bloque de código. Actualización. Alguna sugerencia?

+0

código Resalte, pulse Ctrl + K. Tu html lo detuvo. –

Respuesta

11

Una sugerencia para RollingLogFileAppender es utilizar el mínimo lockingModel. Con esta configuración, el archivo de registro no está bloqueado, sino que se abre y se cierra para cada escritura.

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

Buena llamada. Yo también uso eso y parece ayudar con mi propio visor de registro para que también pueda explorar el archivo. –

+3

'FileAppender.MinimalLock' solo es necesario cuando intenta tener varios procesos (note - procesos, no hilos, log4net ya es seguro para hilos) escriben en el mismo archivo de registro. De lo contrario, solo ralentiza las cosas: "Este método de bloqueo es considerablemente más lento que FileAppender.ExclusiveLock", de http://logging.apache.org/log4net/release/sdk/log4net.Appender.FileAppender.MinimalLock.html –

+2

Debería También menciono que la escritura de múltiples procesos en el mismo archivo de registro generalmente no es una buena idea. De [FAQ] (http://logging.apache.org/log4net/release/faq.html#single-file): "pregúntese si realmente necesita tener múltiples procesos para iniciar sesión en el mismo archivo, luego no lo haga hazlo ;-)". Por lo general, es una mejor idea dar a cada proceso su propio archivo de registro para escribir. –

2

Esto puede ayudar un poco, dependiendo de cuán similares log4j y log4net sean, creo que se basan en la misma especificación, pero no estoy seguro.

Bueno, yo no te puedo decir lo que tengo en mi configuración de log4net, pero te puedo decir lo que tengo en la configuración de log4j si eso es lo suficientemente bueno ...

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

También tengo una correspondiente motosierra fichero de configuración:

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

también aquí hay alguna información que puede ayudarle a decifer este último archivo: http://wiki.apache.org/logging-log4j/Configuring_a_log4j_RollingFileAppender_with_Chainsaw

7

Para iniciar sesión con diferentes colores cuando se muestra en la consola según el nivel del mensaje (depuración, información, error o fatal). El segundo appender es guardarlo en un archivo:

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

corro una configuración bastante escaso log4net y prefieren utilizar el formato XML, pero una cosa que sugeriría la adición (para aplicaciones web) es el ASP. NET trace appender. Simplemente hay que añadir lo siguiente:

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

Luego abajo en su registrador de la raíz, o donde quiera que decide activarla:

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

Esto me permite recibir toda la información de depuración pertinente juntos en una sola página cuando estoy depurando algunos detalles de ASP.NET minuto. La mayoría de las veces tengo el aplicador de seguimiento de ASP.NET comentado para deshabilitarlo, pero realmente me ha ayudado en algunos casos, especialmente cuando intentas averiguar qué método de publicación posterior del servidor está causando el bloqueo en tu aplicación. .

26

Nadie mencionó la codificación. Es muy importante si está registrando mensajes en chino, japonés, árabe o cualquier idioma de doble byte. Aquí se muestra un ejemplo:

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

Comentario muy útil. Desearía que fuera el predeterminado. Sin embargo, al usar value = "utf-8", todos los archivos contendrán una BOM incluso si el archivo está vacío. Para el registro típico, generalmente siempre hay contenido, por lo que esto no es un problema. Sin embargo, esto no es deseable para los registros de errores y advertencias, que idealmente deberían estar vacíos, pero seguirán mostrándose en tamaño de 1 KB debido a la lista de materiales, por lo que siempre se debe verificar en caso de que realmente haya un error. Una solución alternativa es usar . Esto omitirá la lista de materiales innecesaria, por lo que el registro vacío aparecerá como 0 KB. – Dono

+0

buen consejo, gracias. – nakhli

5

Para reducir el tamaño del archivo de registro, usted podría intentar ajustar la ConversionPattern:

aquí está el formato que utilizo:

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

ANTES:

2012 -06-05 10: 58: 40,819 [1] INFO Mi aplicación [(nulo)] - Mi aplicación - === estrella ting ....

DESPUÉS:

06/05 11: 17: 29,151- {INFO} -Mi App - === partir ...

nota: la documentación de Apache parece ser incorrecto para log4net - como lo dice que el uso de SSS milisegundos, mientras que log4net utiliza fff

un pequeño ahorro por línea podría hacer una gran diferencia global :)

+1

De hecho, ¡lo es! – alterfox

Cuestiones relacionadas