"Application Logging" en ABAP: Cómo mejorar su código implementando registro de mensajes
Aprenda en un tutorial paso a paso cómo utilizar las herramientas de SAP para implementar Application Logging (Registro de Aplicaciones). Mejore la calidad de su código y mejore su mantenimiento a través del 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 de misión crítica. La actividad de logging consiste en el registro de la actividad de mensajes del sistema y/o sus aplicaciones, lo que salva muchas horas valiosas al equipo de soporte o desarrolladores a la hora de 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 más simple 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. Si bien las funciones de la versión 3.0 están aún soportadas, trabajaremos en este tip con las mejoras de la 4.6.
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 )
Exsite 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.
Puede correr SBAL_DOCUMENTATION para ver la documentación completa.
LOS MÓDULOS DE LA VERSIÓN 3.0 AÚN PUEDEN UTILIZARSE Y ESTOS INVOCARAN A SUS EQUIVALENTES DE LA VERSION 4.6
También es posible implementar sus propios módulos de función para su Application Log , pero esto no se abarcará en este tip.
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 |
A continuación veremos paso a paso cómo es la creación de Application Log y su posterior visualización.
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 SE80 .
Estructura BAL_LOG_MSG_ADD
CALL FUNCTION 'BAL_LOG_MSG_ADD' "Application Log: Log: Message: Add
EXPORTING
* i_log_handle = " balloghndl Log handle
i_s_msg = " bal_s_msg Notification data
IMPORTING
e_s_msg_handle = " balmsghndl Message handle
e_msg_was_logged = " boolean Message collected
e_msg_was_displayed = " boolean 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
. " BAL_LOG_MSG_ADD
Estructura BAL_LOG_MSG_ADD_FREE_TEXT
CALL FUNCTION 'BAL_LOG_MSG_ADD_FREE_TEXT' "Application Log: Log: Message: Insert as free text
EXPORTING
* i_log_handle = " balloghndl Log handle
i_msgty = " symsgty Message type (A, E, W, I, S)
* i_probclass = '4' " balprobcl Problem class (1, 2, 3, 4)
i_text = " c Message data
* i_s_context = " bal_s_cont Context information for free text message
* i_s_params = " bal_s_parm Parameter set for free text message
IMPORTING
e_s_msg_handle = " balmsghndl Message handle
e_msg_was_logged = " boolean Message collected
e_msg_was_displayed = " boolean 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
. " 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 .
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 .
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
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.
Especialista ABAP |
Copyright 2012 - Teknoda S.A.
IMPORTANTE: “Notas técnicas de SAP ABAP" se envía con frecuencia variable y sin cargo como servicio a nuestros clientes SAP. Contiene notas/tutoriales/artículos técnicos desarrollados en forma totalmente objetiva e independiente. Teknoda es una organización de servicios de tecnología informática y NO comercializa hardware, software ni otros productos. |