2010-06-15 12 views
34

Necesito mi aplicación para crear un archivo de registro cada vez que se ejecuta.log4net un archivo por ejecución

Mi formato preferido sería App.log.aaaa-MM-dd_HH-mm-ss. Si eso no es posible, me conformaría con App.log.yyyy-MM-dd.counter

Esta es mi configuración actual appender:

<appender name="File" type="log4net.Appender.RollingFileAppender"> 
    <file value="App.log"/> 
    <rollingStyle value="Date"/> 
    <datePattern value=".yyyy-MM-dd_HH-mm-ss"/> 
    <staticLogFileName value="false"/> 
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> 
</appender> 

pero crea un número aleatorio de archivos basados en la fecha y la hora

Respuesta

51

que asumen que la aplicación debe crear un único archivo de registro cada vez que se ejecuta, por lo que no necesitan una appender archivo de rodadura (aunque mi solución sería aplicar para rodar appenders de archivos también):

<appender name="FileAppender" type="log4net.Appender.FileAppender"> 
    <file type="log4net.Util.PatternString" value="c:\temp\App-%date{yyyy-MM-dd_HH-mm-ss}.log" /> 
    <appendToFile value="true" /> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%date [%2thread] %-5level - %message%newline" /> 
    </layout> 
</appender> 

(Obviamente se puede utilizar otro su propio diseño y otros ajustes para la appender archivo.)

+2

Que hizo el truco. No sabía sobre PatternString. ¡Gracias! –

+0

Corrígeme si me equivoco, pero esto creará una cantidad ilimitada de archivos de registro, mientras que la solución rollingstyle = Once manejará el purgado de archivos antiguos automáticamente. Creo que esa solución es mejor. – habermanm

+0

Supongo que tienes razón. No recuerdo si "rollingstyle = once" fue posible cuando di mi respuesta ... –

27

también tenga en cuenta que puede establecer su estilo de rodadura como

rollingstyle="Once"

y creará un nuevo archivo cada vez que se ejecute. Si staticLogFileName se establece en verdadero (por ejemplo, logname.log) los registros anteriores se establecerá en logname.log.1, logname.log.2, etc.

El número de archivos mantienen antes de sobreescribir los más antiguos (por ejemplo, 10) puede ser controlado mediante el establecimiento de

maxSizeRollBackups="10"

Editar: Mi config, que crea un registro por cada ejecución datestamped (a menos de que exista, en cuyo caso se sigue la regla .1, se parece a esto:

<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender"> 
    <file type="log4net.Util.PatternString" value="Logs\MyLog-%date{dd-MM-yyyy}.log" /> 
    <appendToFile value="false" />  
    <maxSizeRollBackups value="-1" /> <!--infinite--> 
    <staticLogFileName value="true" /> 
    <rollingStyle value="Once" /> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%-5level %date [%thread] %c{1} - %m%n" /> 
    </layout> 
</appender> 

No es 100% seguro si necesito appendToFile="false" como the docs dicen que se realiza automáticamente cuando se utiliza rollingStyle="Once", pero esto hace que sea más claro, en cualquier caso.

0

Está documentado de Apache en la documentación log4net en:

https://logging.apache.org/log4net/release/config-examples.html

Ctrl + F para la "ejecución por programa"

<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender"> 
    <file value="logfile.txt" /> 
    <appendToFile value="false" /> 
    <rollingStyle value="Size" /> 
    <maxSizeRollBackups value="-1" /> 
    <maximumFileSize value="50GB" /> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> 
    </layout> 
</appender> 
Cuestiones relacionadas