miércoles, 3 de abril de 2013

Log de errores

Registro de excepciones, mensajes y errores.


Un sistema de registro, (“logging”) bien diseñado es una necesidad básica para la salud de cualquier sistema que trato datos de una cierta relevancia. La actividad de logging consiste en el registro de la actividad de mensajes del sistema y/o sus aplicaciones, la cual es necesaria en muchos de los casos en los que el equipo de soporte o desarrolladores necesitan monitorear errores, reconstruir eventos, etc.

En el caso de SAP, como en la mayoría de los sistemas, existe un SYSTEM LOG que registra los eventos a nivel del sistema operativo. Además, SAP provee las herramientas para implementar un APPLICATION LOG para todos los programas ABAP desarrollados. A través de determinadas transacciones, tablas y módulos de función, SAP proporciona una infraestructura para la recepción de mensajes y excepciones en un registro, el ahorro, la lectura y borrado de registros en la base de datos y su visualización.

El archivo de APPLICATION LOG contiene sucesos registrados por las aplicaciones, y, a diferencia del system log, los eventos que se escriben en el Application Log están determinados por los desarrolladores.

Usando esta funcionalidad, se establece una forma estandarizada de almacenar mensajes de error, permitiendo un manejo mas generalizado y preciso de mismos y mejorando la calidad del código.

La funcionalidad de registro de aplicaciones existe desde la versión 3.0, pero fue notablemente mejorada a partir de la versión 4.6 hasta las últimas versiones. Si bien las funciones de la versión 3.0 están aún soportadas.

Estructura de un Application Log
  • En términos generales, se define como "log" a un conjunto de mensajes. Un log usualmente también contienen una cabecera con información descriptiva: número de log, creador, hora de creación, etc
  • El Application Log es una estructura de tablas compuesta por varias tablas. La gestión sobre dichas tablas se realiza utilizando módulos de función estándar provistos por SAP.
  • Los datos de logging se recolectan inicialmente en la memoria local, y luego pueden ser grabados en la base de datos. Esto permite acelerar el proceso al reducir la cantidad de accesos a la base de datos.
  • Cada transacción puede generar varios logs.
  • La estructura del application log es:
- CABECERA DE LOG. Número de log, Usuario, Fecha de generación, Programa o Transacción y Clase de mensaje.

-  MENSAJES DE LOG.

Transacciones utilizadas para gestionar Application Logging.

Hay diferentes transacciones involucradas en la gestión de un application log :

SLG0: New Entry, Transacción utilizada para CREAR y DEFINIR las entradas para sus propias aplicaciones en el Application Log. (Desarrollador)

SLG1: Analyze Application Log, Transacción para ANALIZAR el registro de aplicación. (Usuario principal)

SLG2: Delete Expired Logs, Transacción para ELIMINAR registros caducos. (Administrador)



Módulos de Función para Application Logging

Como se dijo anteriormente, la funcionalidad de registro de aplicaciones existe desde la versión 3.0, pero fue notablemente mejorada a partir de la versión 4.6. Todas los módulos de función tipo “APPL_LOG” existen desde la versión 3.0 (ver tabla más abajo).

A partir de la 4.6 aparecen los módulos de función que comienzan con el prefijo SBAL, mucho más completos y mejor documentados que las antiguas funciones APPL_LOG.

Los principales módulos de función estándar son:
  • BAL_LOG_CREATE     (Abrir un Application Log )
  • BAL_LOG_MSG_ADD   (Generar una entrada con un mensaje en el Application Log )
  • BAL_LOG_MSG_ADD_FREE_TEXT   (Generar una entrada con exto libre en el Application Log 
  • BAL_DSP_LOG_DISPLAY (Mostrar el Application Log )
Exíste además una extensa lista de funciones para gestionar en detalle sobre la base de datos del Application Log, recolectar mensajes, grabar, eliminar, visualizar, etc.

Podemos encontrar toda la documentación relacionada en el con estos módulos de función y su aplicación en el  SBAL_DOCUMENTATION.

Funciones utilizadas para gestionar Application Logs (a partir de 4.6)


FUNCION MODULO FUNCION SIGNIFICADO GRUPO DE FUNCION
GRABACION BAL_DB_SAVE Grabar un log en la base de datos SBAL_CNTL
CREACION BAL_LOG_CREATE Creacion de un log  con datos de cabecera SBAL
BUSQUEDA BAL_GLB_SEARCH_LOG Buscar un log/s ( en memoria) SBAL
BAL_GLB_SEARCH_MSG Buscar un mensaje/s ( en memoria) SBAL
BAL_DB_SEARCH Buscar un log en la base de datos SBAL_CNTL
INSERCION BAL_LOG_MSG_ADD Añadir los mensajes en el  log SBAL
BAL_LOG_MSG_ADD_FREE_TEXT Añadir los mensajes de texto libre en el log SBAL
BAL_DB_LOAD Cargar el log en la base de datos SBAL_CNTL
BAL_LOG_EXCEPTION_ADD Añadir las excepciones en el log SBAL
LECTURA BAL_HDR_READ Leer los datos y textos de la cabecera del log SBAL
BAL_MSG_READ Leer los datos y textos del/los mensaje/s  del  log SBAL
BAL_LOG_EXCEPTION_READ Leer los datos y textos de la/s excepción/es del log SBAL
MODIFICA-CION BAL_LOG_MSG_CHANGE Cambiar un mensaje de un log SBAL
BAL_LOG_HDR_CHANGE Cambiar un encabezado  de un log SBAL
BAL_LOG_EXCEPTION_CHANGE Cambiar una excepción  de un log SBAL
VISUALIZA-CION BAL_DSP_LOG_DISPLAY Muestra  pantalla total de la salida del log. SBAL_DB_INTERNAL
BAL_DSP_LOG_PARAMETERS
Muestra  los parametros de la cabecera del log.

SBAL_DB_INTERNAL
BAL_DSP_LOG_TECHNICAL_DATA Muestra los datos tecnicos de la  cabecera del log SBAL_DB_INTERNAL
BAL_DSP_MSG_PARAMETERS
Muestra  los parametros del/ los  mensaje/s  del log.

SBAL_DB_INTERNAL
BAL_DSP_MSG_TECHNICAL_DATA Muestra los datos tecnicos del/los mensaje/s  del log. SBAL_DB_INTERNAL
BORRADO BAL_LOG_DELETE Borrar  el log SBAL_TOOLBOX
BAL_LOG_MSG_DELETE Borrar el mensaje del log SBAL
BAL_LOG_MSG_DELETE_ALL Borrar  todos los mensajes del log SBAL
BAL_LOG_REFRESH Borrar el log de la memoria SBAL
BAL_LOG_EXCEPTION_DELETE Borrar excepcion del log SBAL
BAL_DB_DELETE Borrar el log de la memoria SBAL_CNTL


Estructura de los módulos de Función más utilizados

BAL_LOG_MSG_ADD y BAL_LOG_MSG_ADD_FREE_TEXT son  módulos de función estándar de SAP. A continuación se presentan los detalles de estos FM. Toda esta información y más se pueden ver si se introduce el nombre del módulo de función BAL_LOG_MSG_ADD en la correspondiente transacción SAP como SE37 y SE80 .

Estructura  BAL_LOG_MSG_ADD




Estructura BAL_LOG_MSG_ADD_FREE_TEXT


Creación de un Application Log Paso a Paso


Para la creación de los objetos de un Application Log se deben seguir los siguientes pasos:

PASO 1: Ir a la transacción SLG0 y crear el objeto, completar su descripción. Luego salvarlo y asignarlo a un paquete y a una OT . Luego para crear el subobjeto, seleccionar el objeto creado ZTEST, seleccionar NEW ENTRIES y completar el nombre y la descripción del subobjeto y luego Salvar .

ABAP-Application-Log-creacion

PASO 2: Ir a la transacción SE80 y crear un programa con TOP INCLUDE, completar el titulo , tipo , status y aplicación, salvar y asignar paquete .

ABAP-006-Create Program

PASO 3: Copiar el siguiente código en el programa ZLOGGING, salvar y activar, y posteriormente ejecutar. De esta forma se podrá visualizar el aplication log implementado.
La finalidad del código siguiente es el de generar el application log, la implementación de  los propios mensajes en éste, y la visualización del log con los mensajes implementados.

---------------------------PARTE PRINCIPAL DEL PROGRAMA ---------------------------
INCLUDE ZLOGGINGTOP.
INCLUDE ZLOGGINGFORMS.
START-OF-SELECTION.
PERFORM LOG_CREATE.
PERFORM ADD_MSG_FREE_TEXT.
PERFORM ADD_MSG.
PERFORM LOG_DISPLAY.

---------------------------- PARTE DEL TOP INCLUDE --------------------------------
* DEFINICION DE TIPOS Y VALRIABLES A UTILIZAR EN EL LOG

TYPES : BALSMG TYPE STANDARD TABLE OF  BAL_S_MSG.

DATA:  LS_LOG TYPE BAL_S_LOG,

L_LOGHAND TYPE BALLOGHNDL,

L_MSG TYPE BAL_S_MSG,

B_LOG TYPE BOOLEAN,

B_DISP TYPE BOOLEAN,

LT_MSG TYPE BALSMG,

WA_LT_MSG TYPE BAL_S_MSG.

* ASIGNACION A LA ESTRUCTURA LS_LOG DE LOS SIG.ATRIBUTOS :
* ASIGNACION DEL  OBJETO Y SUBOBJETO


LS_LOG-OBJECT = 'ZTEST'.

LS_LOG-SUBOBJECT = 'ZTESTSUB'.
* ASIGNACION  DE PROGRAMA Y ID EXTERNO

LS_LOG-ALPROG ='ZLOGGING'.

LS_LOG-EXTNUMBER =' 001 APPLICATION LOG'.

* DEFINICION DE VARIABLES PARA MENSAJE DE  TEXTO LIBRE

DATA:

LL_MSG(60) TYPE C,

G_LOG TYPE BALLOGHNDL,

P_FACPRO(15) TYPE C  VALUE 'INFORMATIVO',

CONTRATO_BASE(20) TYPE C VALUE 'MENSAJE CREADO'.

--------PARTE DEL FORMS INCLUDE---------

FORM LOG_CREATE.

* FUNCIÓN PARA LA CREACIÓN DEL LOG

CALL FUNCTION 'BAL_LOG_CREATE'

EXPORTING

I_S_LOG = LS_LOG

IMPORTING

E_LOG_HANDLE = L_LOGHAND

EXCEPTIONS

LOG_HEADER_INCONSISTENT = 1

OTHERS = 2.

ENDFORM.

FORM ADD_MSG.


* GENERACION DE LOS MENSAJES PERSONALIZADOS
* MENSAJE DE INFORMACION


L_MSG-MSGTY = 'I'.
L_MSG-MSGID = '00'.
L_MSG-MSGNO = '398'.
L_MSG-MSGV1 = 'TESTING 1234'.
APPEND L_MSG TO LT_MSG.


* MENSAJE DE ADVERTENCIA

L_MSG-MSGTY = 'W'.
L_MSG-MSGID = '00'.
L_MSG-MSGNO = '398'.
L_MSG-MSGV1 = 'WARNING TESTING 1234'.
APPEND L_MSG TO LT_MSG.
* MENSAJE DE ERROR

L_MSG-MSGTY = 'E'.
L_MSG-MSGID = '00'.
L_MSG-MSGNO = '398'.
L_MSG-MSGV1 = 'ERROR TESTING 1234'.
APPEND L_MSG TO LT_MSG.
* LOOPEAR LA TABLA PARA AGREGAR LOS MENSAJES CREADOS Y UTILIZAR LA
LOOP AT LT_MSG INTO WA_LT_MSG.

* FUNCION PARA ADICIONAR LOS MENSAJES EN EL LOG .


CALL FUNCTION 'BAL_LOG_MSG_ADD'

EXPORTING

I_LOG_HANDLE = L_LOGHAND     Log handle

I_S_MSG = WA_LT_MSG              Notification data

IMPORTING

E_MSG_WAS_LOGGED = B_LOG       Message handle

E_MSG_WAS_DISPLAYED = B_DISP    Message output

EXCEPTIONS

LOG_NOT_FOUND = 1     Log not found

MSG_INCONSISTENT = 2  Message inconsistent

LOG_IS_FULL = 3       Message number 999999 reached. Log is full

OTHERS = 4.

ENDLOOP.
ENDFORM.

FORM ADD_MSG_FREE_TEXT.


CONCATENATE 'texto :' p_facpro 'para un ' contrato_base

INTO ll_msg SEPARATED BY space.

* FUNCION PARA ADICIONAR LOS MENSAJES EN EL LOG CON TEXTO LIBRE.

CALL FUNCTION 'BAL_LOG_MSG_ADD_FREE_TEXT'

EXPORTING

i_log_handle     = g_log

i_msgty          = 'I'            "tipo de error

i_text           = ll_msg

EXCEPTIONS

log_not_found    = 1

msg_inconsistent = 2

log_is_full      = 3

OTHERS           = 4.

IF sy-subrc <> 0.

MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno

WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

ENDIF.
ENDFORM.

FORM LOG_DISPLAY.


* FUNCION PARA MOSTRAR EL LOG IMPLEMENTADO

CALL FUNCTION 'BAL_DSP_LOG_DISPLAY'.
ENDFORM.

Visualización del Application Log

ABAP-007-Display-Log

Para tener en cuenta:
  • Los Application Log tienen carácter de temporarios, y están para monitorear el curso de una aplicación. No es el objetivo actuar como registros definitivos de datos críticos. Los datos que deben ser almacenados por largo tiempo por razones de seguridad deben almacenarse con los documentos de cambio.
  • Se se utiliza application logging en escenarios complejos, por ejemplo, muchísimos usuarios concurrentes sobre la aplicación (Ej. venta de pasajes distribuida), deberá contemplarse los principios de programación fundamentales, usando colas de mensajes, save, commit, etc.
  • Pueden encontrarse respuestas a varias inquietudes en las notas de OSS, utilizando como criterio de búsqueda "BC-SRV-BAL". También pueden encontrarse programas ejemplo de application logging pulsando F4 sobre “SBAL_DEMO_*” en la transacción SE38.

No hay comentarios:

Publicar un comentario

Nota: solo los miembros de este blog pueden publicar comentarios.