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 .
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.