net name logmanager loglevel logger log log4net rollingfileappender

name - log4net xmlconfigurator



¿Por qué la fecha se agrega dos veces en los nombres de archivo cuando se usa Log4Net? (6)

Como señaló Olle. su problema está relacionado con ''/ g'', que su log4net está interpretando como otro formato de fecha. Intente eliminar el ".aaaa-MM-dd.lo / g" y reemplazarlo por "aaaa-MM-dd"

El ".log" no pertenece al formato de fecha

Estaba intentando agregar la fecha a mi nombre de archivo de registro y pude hacerlo siguiendo las pocas sugerencias que encontré en stackoverflow. Todo funciona bien, pero por alguna razón, el primer archivo siempre tiene la fecha anexada dos veces.

Por ejemplo, en lugar de log.2009-02-23.log , obtengo log.2009-02-23.log.2009-02-23.log .

Lo encontré tan extraño y fyi, este es un código muy simple. No es como si lo tuviera funcionando en un entorno de subprocesos múltiples.

Mi configuración de log4net:

<log4net> <appender name="MyLog" type="log4net.Appender.RollingFileAppender"> <file value="../../Logs/Mylog"/> <staticLogFileName value="false" /> <appendToFile value="true"/> <rollingStyle value="Date"/> <datePattern value=".yyyy-MM-dd.lo/g" /> <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%d{DATE} [%t] %-5p %c - %m%n"/> </layout> </appender> <root> <level value="INFO"/> <appender-ref ref="MyLog"/> </root> </log4net>

¿Alguna idea de por qué?

Editar: Quiero agregar la información sobre el entorno en el que estoy probando esto.
- asp.net
- .NET framework 2.0
- Windows Server 2003 Paquete de servicio de 64 bits 2
- log4net 1.2.10


try <datePattern value=".yyyy-MM-dd.lo/g" /> No entiendo para qué es / g.


Yo uso lo siguiente:

<param name="DatePattern" value="yyyy.MM.dd./l/o/g"/>

Con esto obtengo nombres de archivos como: 2009.02.23.log


Es un problema de permiso. Al menos eso es lo que me está sucediendo.

Soy nuevo en el uso de Log4Net, así que no sabía que tenía un registro interno, pero lo encontré, así que intenté activar el inicio de sesión interno . No estaba muy seguro de lo que estaba diciendo, pero esto es lo que parece que está haciendo: 1. Agregar la fecha al nombre del archivo. 2. Intente acceder al archivo para escribir en él (error). 3. Agregue la fecha al nombre de archivo nuevamente . 4. Acceda con éxito al archivo (que ahora tiene el nombre de archivo raro)

Antes de saber esto, buscaba la solución a este problema con palabras clave como lo que tengo como título en esta pregunta de . No había mucha información por ahí. Encontré tal vez a un tipo que dijo que le pasa a algunas personas, pero nunca explicó realmente por qué ni la solución. Con esta nueva información (+ el mensaje de error interno de Log4Net), estaba viendo diferentes hilos de los motores de búsqueda. Con eso encontré indicios de que podría ser un problema de permiso.

Parece que la aplicación de escritura no tiene suficiente permiso para la carpeta de registros. La identidad predeterminada de la aplicación suele ser NETWORK_SERVICE. Después de dar más permiso (le di el control total pero no sé cuál es el mínimo para que funcione) a la carpeta, funciona bien.

Si alguien puede explicar esto mejor que yo, no dude en editarlo.


Esto sucede si hay un problema al acceder al archivo de registro cuando inicializa el sistema de registro. Puede suceder si inicializa el sistema de registro dos veces, si ejecuta su programa mientras se está ejecutando otra copia y escribiendo en el archivo de registro, o si está editando el archivo de registro en un editor de texto. Básicamente cualquier cosa que cause un bloqueo de escritura en el archivo de registro cuando se ejecuta log4net init.

Verifique su código para ver si hay llamadas duplicadas a log4net init; por ejemplo, tal vez esté inicializando en un constructor en lugar de en un constructor estático o init global.

Esto también puede suceder si está ejecutando una configuración de ''jardín web'' y no incluye el PID en el nombre del archivo, ya que cada proceso diferente del servidor web intenta escribir en el mismo archivo. Si usa jardines web y escribe en archivos, agregue el pid al patrón de nombre de archivo para que cada proceso del servidor obtenga su propio archivo.


Me encuentro con el mismo problema. Para mí, fue una combinación de usar RollingFileAppender para mis registros de prueba y ejecutar mis pruebas de NUnit con ReSharper.

Resulta que ReSharper usa dos procesos para ejecutar las pruebas:

que crea una condición de carrera en el archivo de registro.

Ahora, si cambiamos el nombre del archivo de registro para incluir el ID del proceso:

<appender name="MyLog" type="log4net.Appender.RollingFileAppender"> <file type="log4net.Util.PatternString" value="MyLog.pid.%processid" /> <appendToFile value="true" /> <rollingStyle value="Composite" /> <maxSizeRollBackups value="10" /> <maximumFileSize value="10MB" /> <staticLogFileName value="false"/> <datePattern value="_yyyy-MM-dd''.log''"/> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%d{HH:mm:ss.fff} [%15.15t] %-5p ''%40.40c'' - %m%n" /> </layout> </appender>

el problema esta resuelto. Cada archivo tiene su propio nombre único:

MyLog.pid.5440_2010-10-13.log
MyLog.pid.1496_2010-10-13.log

Tenga en cuenta el uso de PatternString para ''tipo''.

Espero que ayude.