2009-11-25 12 views
12

¿Es posible insertar campos adicionales en la base de datos y usarlos en log4net? Tengo un UserId que me gustaría tener en un campo adicional en el log-table.Log4Net y campos adicionales

he añadido el campo en el log4net.config:

<parameter> 
    <parameterName value="@userid" /> 
    <dbType value="guid" /> 
    <layout type="log4net.Layout.RawPropertyLayout" /> 
</parameter> 

Pero ¿Cómo se actualiza la interfaz ILog para apoyar el campo de base de datos adicional. Por lo que podría, por ejemplo, log:

log4net.LogManager.GetLogger("logname").Fatal(message, exception, userid); 

Respuesta

19

Puede usar la función "context" en log4net. Básicamente le permite establecer propiedades que luego puede usar en su apéndice de registro. Puede establecer estas propiedades en diferentes ámbitos (Global, Thread, etc.). En su caso creo que se podría ir (por ejemplo, justo después de que el usuario se ha conectado):

log4net.ThreadContext.Properties["userid"] = userid; 

en el archivo de configuración, se puede entonces utilizar esta propiedad y añadirlo a la appender registro. Creo que sería algo como esto para el AdoNetAppender

<parameter> 
    <parameterName value="@userid" /> 
    <dbType value="guid" /> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%property{userid}" /> 
    </layout> 
</parameter> 

Tenga en cuenta que no he compilado cualquiera de los fragmentos anteriores, por lo que podrían necesitar algunos ajustes, pero debe darle una idea general de cómo esto podría estar solucionado.

Puedes leer más sobre esto here.

Ps. Creo que el MDC.Set al que se hace referencia en la primera respuesta es obsoleto.

Cuestiones relacionadas