realidad he encontrado una manera de hacer esto en este tema:
http://www.l4ndash.com/Log4NetMailArchive/tabid/70/forumid/1/postid/18271/view/topic/Default.aspx
He probado el primer método y funciona. En caso de que ese enlace ya no sea bueno, reproduciré el código aquí. Básicamente, el autor afirma que hay dos formas de hacerlo.
Primera forma:
crear un nuevo modelo de bloqueo que sólo adquiere un bloqueo (y crea el archivo) si el umbral apropiado para que las obras del registrador.
public class MyLock : log4net.Appender.FileAppender.MinimalLock
{
public override Stream AcquireLock()
{
if (CurrentAppender.Threshold == log4net.Core.Level.Off)
return null;
return base.AcquireLock();
}
}
Ahora en el archivo de configuración, ajuste el umbral para comenzar como:
<threshold value="OFF" />
y asegúrese de que establece esta nueva LockingModel como modelo:
<lockingModel type="Namespace.MyLock" />
estoy usando esto con un apilador de archivo rodante.
El segundo método se enumera en el enlace. No he probado esta técnica, pero parece ser técnicamente sólida.
Para cualquier persona que intenta seguir las respuestas, creo que la respuesta de Jon Skeet es en realidad un comentario en esta respuesta. –
¿Puede describir cuál es el segundo método ya que el enlace no funciona? No tiene sentido mencionar que un método está en el enlace cuando el enlace ya no funciona. –
Utilicé esta técnica para crear un NoLock. Mi situación era que estaba usando la configuración del archivo de registro en la aplicación web, pero en realidad estoy escribiendo en un servicio de Windows con una configuración similar. La aplicación web estaba bloqueando el archivo y diferentes tipos de bloqueo. Mínimo, InterProcess no ayudó. Ahora la aplicación web usa las configuraciones de log4net para mostrar todo el archivo de registro a admin pero no bloquea el archivo que realmente usa el servicio de Windows. Estoy profundamente agradecido por esta respuesta. Perdí alrededor de 5-6 horas en esto. –