Actualmente estoy ejecutando un servicio de Windows que crea varias instancias de una clase.Archivo de registro único para cada instancia de la clase
En la parte superior de la clase de servicio y todas las demás clases en mi solución, tener algo como esto:
private static readonly ILog _log = LogManager.GetLogger(typeof(SomeClassTypeHere));
En mi App.config, tengo Log4net configurado para un solo archivo:
<log4net debug="true">
<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="Logs\SomeLogFileName.xml" />
<appendToFile value="true" />
<rollingStyle value="Size" />
<countDirection value="1" />
<maxSizeRollBackups value="30" />
<maximumFileSize value="10MB" />
<staticLogFileName value="true" />
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<layout type="log4net.Layout.XmlLayoutSchemaLog4j">
<locationInfo value="true" />
</layout>
</appender>
<root>
<level value="INFO" />
<appender-ref ref="RollingFileAppender" />
</root>
</log4net>
Esto funciona muy bien en la mayoría de los aspectos, y todo se registra en un único archivo. Sin embargo, me gustaría crear un archivo de registro separado para cada instancia de una clase en particular que crea mi servicio.
Esta es una clase que a menudo necesitamos para monitorear el apoyo y podemos tener un puñado de instancias que se ejecutan al mismo tiempo.
No sabemos qué instancias se ejecutarán en un momento dado, por lo que hace que crear archivos estáticos en la configuración sea un poco doloroso.
intenté despegar el modificador de sólo lectura y establecer lo siguiente en el constructor de la clase:
_log = LogManager.GetLogger("DataCollectionClass_" + deviceName + "_" + DateTime.Now.ToString("MMddyyyy"), typeof(SomeClassTypeHere));
Pero eso requiere que defino una appender manualmente en la configuración, lo que sería engorroso y difícil de seguir el ritmo de .
¿Alguna idea de hacer esto en L4N? He visto los enlaces here, pero realmente no sé si es necesario ese armado.
In Si el código no era evidente, la instancia llamada dev1 siempre se registra en Device1.log, y la instancia denominada dev2 se registra en Device2.log. El código se prueba y usted debería poder copiarlo en el programa.cs archivo de un nuevo proyecto de consola para probarlo. – dhochee
Eso ayuda, ¡gracias! – Killnine