sumar obtener numero limitar filas enumerar datos contar columnas columna agregar c# .net logging log4net

limitar - obtener el numero de filas de un datagridview c#



Log4Net: Cómo agregar un indizador simple(número de fila) a cada línea de registro (2)

Haría lo siguiente:

Primero, defina un ayudante de registro

public class WebLoggingHelper { public static CurrentLineHelper CurrentLine = new CurrentLineHelper(); public class CurrentLineHelper { private long _counter = 0; public override string ToString() { long counter = System.Threading.Interlocked.Increment(ref _counter); return counter.ToString(); } } }

A continuación, conecte el asistente de registro a las propiedades de log4net en el lugar donde inicializa su registrador

public void ConfigureLog4Net() { XmlConfigurator.Configure(); GlobalContext.Properties["CurrentLine"] = WebLoggingHelper.CurrentLine; }

¡Lucro! o más en serio, ahora puede usar la propiedad directamente en su formato log4net utilizando %property{CurrentLine}

<conversionPattern value="%property{CurrentLine}- %date - %identity - %property{current_request_id} - %m%n"/>

Utilizo este método para registrar muchas cosas que deben calcularse y específicas de la aplicación. Es posible que desee agregar algo de lógica para usar el número largo durante períodos muy largos, y algo de formato para la numeración de líneas (relleno con ceros a la izquierda, por ejemplo, etc.) ...

Buen registro!

EDIT: la solución que presento aquí debe usarse solo para un archivo de registro a la vez. Si utiliza este patrón en muchos archivos de registro, tendrá un número de línea único en cada uno si agrega protección contra las condiciones de carrera (simplemente agregue un synclock en el método tostring del objeto auxiliar) Para administrar varios registradores con número de línea, otro método debe ser utilizado

EDIT # 2: actualizado para ser seguro para subprocesos, también actualizado para compartir los nombres de los identificadores con la respuesta aceptada para beneficio de los lectores (más fácil de digerir y comparar).

Aquí está el problema: quiero agregar el indexador de fila (número de fila o iterador) a cada fila en el archivo de registro. No es necesario que sea único para todo el archivo de registro, sino solo para la "sesión de la aplicación" (es decir, cada vez que se inicia la aplicación Win32, comenzamos nuestra cuenta regresiva: 1, 2, 3, etc.)

¿Existe alguna forma incorporada (sintaxis de etiqueta de conversionpattern) o alguna extensión personalizada?

¡Muchas gracias!


Mi solución solo funciona para un solo aplicador y el contador se reiniciará cada vez que inicie la aplicación.

Podría usar un convertidor de patrones:

public sealed class LineCounterPatternConverter : PatternLayoutConverter { private static int _counter = 0; protected override void Convert(TextWriter writer, LoggingEvent loggingEvent) { var counter = System.Threading.Interlocked.Increment(ref _counter); writer.Write(counter.ToString()); } }

entonces lo configuras así:

<layout type="log4net.Layout.PatternLayout"> <conversionPattern value="[%LC] %message%newline" /> <converter> <name value="LC" /> <type value="YourNameSpace.LineCounterPatternConverter" /> </converter> </layout>

Los corchetes [] son, por supuesto, opcionales. También podría hacer algo como esto %6LC que rellenaría la línea con espacios para que el mensaje se alinee bien.