Registrar usuario de GAM y Session ID en el log de GeneXus (Log4Net)


 GeneXus utiliza log4net/log4j para generar el log tanto de las bibliotecas internas de Genexus como para el log de usuario. 

Estas bibliotecas de log, son sumamente poderosas y permiten hacer un registro detallado de la actividad realizada en nuestra aplicación. 

Para un proyecto especifico, necesitamos el registro del usuario y un identificador de la sesion en el log, de tal forma de poder filtrar luego por la actividad de un usuario especifico. 

Vos a mostrar como lo resolví para .NET pero sirve también para java (aunque no lo probé). 

Primero hice un procedure para definir una propiedad de log4net, con el código:

SetLog4NetProperty

//Log4NetPropertyKey and Log4NetPropertyValue son VarChar(100) CSHARP    log4net.ThreadContext.Properties[  [!&Log4NetPropertyKey!]  ] = [!&Log4NetPropertyValue!];
Luego del Login en la aplicación hago:
SetLog4NetProperty('GAMUser',&GAMUser.Name)
y en los archivos de configuración del log (log.config y log.console.config) se pone:
 <layout  type="log4net.Layout.PatternLayout">      <conversionPattern  value="%d{ISO8601} [%t] %-5p %c - %m %property{GAMUser}%n"/>   </layout>
Esto va a generar a lo ultimo de cada línea el usuario de GAM que generó esa línea de log. También se puede recuperar la sesión y grabarlo en el log, para poder hacer un seguimiento de toda una sesión.

Comentarios

Entradas más populares de este blog

La nefasta influencia del golero de Cacho Bochinche en el fútbol uruguayo

Aplicación monolítica o distribuida?

Funcionalidades de GeneXus que vale la pena conocer: DATE Constants.