¿Cómo puedo insertar pestañas en el patrón de diseño de log4net?


Mi necesidad es simple: quiero poder abrir mi archivo de registro de texto en excel, para que lo rompa automáticamente en columnas que coincidan con los campos de registro.

Para eso, necesito los campos de registro separados con una pestaña.

Mi patrón es: %utcdate [%thread] %-5level %logger - %message%newline

Necesito algo como: %utcdate%tab[%thread]%tab%-5level%tab%logger%tab%message%newline

Gracias.

 27
Author: mark, 2010-10-14

4 answers

Advertencia: En realidad no he utilizado log4net. Pero si entiendo correctamente, la configuración es un archivo XML, ¿no? Y el patrón es solo texto con algunas fichas especiales. Entonces, ¿has intentado incrustar caracteres de pestaña reales en tu patrón? La secuencia XML para una pestaña es 	, por ejemplo:

<conversionPattern value="%utcdate&#9;[%thread]&#9;%-5level&#9;%logger&#9;%message%newline" />

O si usted está suministrando el patrón de alguna otra manera (tal vez a través de la PatternString constructor o lo que sea), solo incluye caracteres de tabulación en la cadena que estás pasando. Los documentos para eso constructor deferir a la PatternLayout docs para hablar de la cadena en sí, y allí dicen :

Usted es libre de insertar cualquier texto literal dentro del patrón de conversión.

(Su énfasis. Vale la pena intentarlo, de todos modos...

 43
Author: T.J. Crowder,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-10-14 14:48:02

Esto funcionó para mí:

1) Cuando se instancie su clase de registro, agregue esta línea:

log4net.GlobalContext.Properties["tab"] = "\t";

2) Luego, en el XML de log4net, haga una referencia a su propiedad log4net recién creada. Por ejemplo:

<conversionPattern value="%property{tab}%message%newline" />
 6
Author: Gordon Slysz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-06-30 18:59:04

Puede escribir tab dentro del patrón sin escapar (ver espacio entre el nivel y la fecha):

<conversionPattern value="%level    %date{HH:mm:ss,fff} ..." />

No puedo escribir tab en visual studio, porque escribe espacios, pero escribí tab en notepad++ copie (ctrl+c ctrl+v) y está funcionando.

EDITAR: el desbordamiento de pila reemplazó mi pestaña con espacios. Por lo tanto, debe escribir su propia pestaña

 1
Author: Peter Dub,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-06-09 07:21:54

Si esto es solo sobre Excel, entonces podría usar algún otro separador, tal vez incluso un ; sería lo suficientemente bueno.

Otra opción sería escribir su propio convertidor de patrones. Un ejemplo se puede encontrar aquí.

 0
Author: Stefan Egli,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:24:58