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

Aplicación monolítica o distribuida?

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

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