lunes, 1 de diciembre de 2008

Logging "Sencillo" en Biztalk

En la casi todas las ocasiones en las que uno trabaja con Biztalk Server, es imprescindible poder loguear resultados, mensajes o excepciones en algún archivo de texto plano o en el visor de eventos de nuestro server, ya que al no tener interfaz de usuario la única manera de poder analizar detalladamente la ejecución de nuestro flujo de trabajo (workflow) diseñado es analizando el log escrito por la orquestación. Indudablemente lo más conveniente y aconsejable para esta tarea seria utilizar alguna de las librerías ya diseñadas para esta tarea, podrían ser Enterprise Library o Log4Net las más conocidas y que de hecho funcionan bastante bien.

Pero debido a que el uso de estas librerías implica tener que configurar o modificar archivos de conflagración y confeccionar algunos mas en el caso de EntLib, en muchos casos para poder hacer pruebas rápidas o para el caso en el que el entorno va a ser utilizado solo para probar alguna versión nueva de alguna tecnología (me a tocado tener que trabajar en varias maquinas virtuales ) dejo esta pequeña assembly en la cual existen 2 métodos.
El primero solo loguea el valor de alguna variable y el segundo permite escribir contenido de todo un mensaje en un archivo de log.
El código de la clase conteniendo ambos métodos seria:

[Serializable]







     public class ArielLog







    {















        public static void WriteValue(string value)







        {







            File.AppendAllText("C:\\ArchivosLog.txt", value);







            System.Diagnostics.EventLog.WriteEntry("BizTalkLog", value);







        }








        public static void WriteMessage(XLANGMessage msg)







        {







            XmlDocument doc = (XmlDocument)msg[0].RetrieveAs(typeof(XmlDocument));











            string mensaje = doc.InnerXml;







            File.AppendAllText("C:\\Mensjaes.txt", mensaje);







        }








    }




Y para usar estos dos métodos simplemente restaría referenciar a la assembly en la que se encuentra la clase que los contiene y ya podrían ser llamados desde cualquier shape de expresión de la siguiente manera:

Para loguear un mensaje









O para loguear el valor de una variable:


Eso seria todo, por si alguien quiere recompilar la librería para cambiarle el nombre o lo que fuera, adjunto una solución con el código de la assembly firmado para poder ser subida a la GAC y así poder utilizarla desde Biztalk Server.

Ariel Serlin


Para bajar el código hace click aquí

No hay comentarios: