logging - the - ¿Cómo iniciar sesión en archivos separados por hilo con Log4Net?
log4net tutorial español (1)
Mi aplicación utiliza varios hilos con nombres bien definidos (es decir, no un grupo de hilos con hilos ''anónimos''). En este momento, todos estos subprocesos envían sus mensajes de registro a un archivo, y aunque la identificación del subproceso es parte de la línea de registro, esto dificulta mucho analizar el comportamiento de la aplicación. Por lo tanto, quiero que cada hilo inicie sesión en su propio archivo de registro.
Parece que Log4Net no ofrece una opción incorporada para elegir un appender basado en el hilo. ¿Alguien sabe de una solución para esto? Tenga en cuenta que, obviamente, preferiría no cambiar a otra biblioteca de registro.
La forma de log4net de "elegir" appenders es a través del filtrado. En su escenario, necesitaría una forma de configurar un número de apéndices, cada uno representando un hilo bien definido, y tener filtros en cada apéndice que pasa a través de los mensajes solo desde su hilo respectivo.
Como el ID del hilo no es determinista, necesitará algo más para filtrar. Supongo que está controlando la creación de estos subprocesos usted mismo y sugiere que cada subproceso registre un identificador en una propiedad en el ThreadContext . A continuación, puede usar PropertyFilter para filtrar los mensajes según los identificadores.
Aquí hay una configuración de configuración de ejemplo que tiene dos anexos, cada uno de los cuales anexa mensajes donde el valor actual de la propiedad threadId coincide con un identificador dado.
<appender name="x">
<filter type="log4net.Filter.Property">
<key value="threadId" />
<stringToMatch value="threadX" />
</filter>
<filter type="log4net.Filter.DenyAllFilter" />
...
</appender>
<appender name="y">
<filter type="log4net.Filter.Property">
<key value="threadId" />
<stringToMatch value="threadY" />
</filter>
<filter type="log4net.Filter.DenyAllFilter" />
...
</appender>
<root>
<appender-ref name="x" />
<appender-ref name="y" />
</root>