Yo uso el appender log4net.Appender.AdoNetAppender.
Mi tabla log4net son los siguientes campos[Date],[Thread],[Level],[Logger],[Message],[Exception]
Necesitaría agregar otro campo a la tabla log4net (por ejemplo, SalesId), pero ¿cómo lo especificaría en mi xml y en el código para registrar el "SalesId" al registrar un mensaje de error o información?
p.ej log.Info("SomeMessage", SalesId)
Aquí está el xml de log4net
<appender name="SalesDBAppender" type="log4net.Appender.AdoNetAppender">
<bufferSize value="1" />
<connectionType value ="System.Data.SqlClient.SqlConnection" />
<connectionString value="Data Source=..." />
<commandText value="INSERT INTO Log4Net ([Date],[Thread],[Level],[Logger],[Message],[Exception]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)" />
<parameter>
<parameterName value="@log_date" />
<dbType value="DateTime" />
<layout type="log4net.Layout.RawTimeStampLayout" />
</parameter>
<parameter>
<parameterName value="@thread" />
<dbType value="String" />
<size value="255" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%thread" />
</layout>
</parameter>
<parameter>
<parameterName value="@log_level" />
<dbType value="String" />
<size value="50" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%level" />
</layout>
</parameter>
<parameter>
<parameterName value="@logger" />
<dbType value="String" />
<size value="255" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%logger" />
</layout>
</parameter>
<parameter>
<parameterName value="@message" />
<dbType value="String" />
<size value="4000" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%message" />
</layout>
</parameter>
<parameter>
<parameterName value="@exception" />
<dbType value="String" />
<size value="2000" />
<layout type="log4net.Layout.ExceptionLayout" />
</parameter>
</appender>
LogicalThreadContext
está bien para usar con Tareas,ThreadContext
aunque no está bien para usar , porque siempre está limitado a un hilo en particular.Tres tipos de contexto de registro disponibles en Log4Net.
Log4Net.GlobalContext: este contexto se comparte en todos los subprocesos y dominios de la aplicación. Si dos subprocesos establecen la misma propiedad en GlobalContext, un valor anulará al otro.
Log4Net.ThreadContext: - Este ámbito de contexto se limita al hilo de llamada. Aquí dos subprocesos pueden establecer la misma propiedad en diferentes valores sin anularse entre sí.
Log4Net.ThreadLogicalContext: - Este contexto se comporta de manera similar al ThreadContext. Si está trabajando con un algoritmo de grupo de subprocesos personalizado o alojando el CLR, puede encontrar algún uso para este.
Agregue el siguiente código a su archivo program.cs:
2) Agregue la definición de parámetro para la columna personalizada:
fuente
Aquí hay una versión funcional con algunas preferencias personalizadas. Agregué una columna personalizada para almacenar un código de excepción generado.
1) Agregue su columna personalizada (código de excepción aquí) a la configuración de Log4net:
2) Log4NetExtentedLoggingCustomParameters.cs
3) Log4NetExtentedLoggingPatternConverter.cs
4) Log4NetExtentedLoggingPatternLayout.cs
5) Logger.cs // ¡Disfrute de su registrador con una nueva columna! :)
referencias:
http://blog.stvjam.es/2014/01/logging-custom-objects-and-fields-with
fuente