SAP ABAP LOG
Los log de aplicación se crean en la transacción SLG0 y se ven en la SLG1
Ejemplo de programa que graba mensajes en log
FUNCTION ZSD_MESSAGE_LOGGING.
*"----------------------------------------------------------------------
*"*"Interfase local
*" IMPORTING
*" REFERENCE(I_LOG_OBJECT) TYPE BALOBJ_D
*" REFERENCE(I_LOG_OBJECT_INF) TYPE BALSUBOBJ
*" REFERENCE(I_EXTNUMBER) TYPE STRING
*" REFERENCE(I_TCOD) TYPE BALTCODE OPTIONAL
*" REFERENCE(I_PROG) TYPE BALPROG OPTIONAL
*" TABLES
*" T_LOG_MESSAGE STRUCTURE BDCMSGCOLL
*" EXCEPTIONS
*" LOG_HEADER_INCONSISTENT
*" LOGGING_ERROR
*"----------------------------------------------------------------------
DATA:
l_log_handle TYPE balloghndl,
l_s_log TYPE bal_s_log,
l_dummy type string,
l_ext_no type bal_s_log-extnumber,
l_s_mdef TYPE bal_s_mdef.
DATA lt_log_handle TYPE bal_t_logh.
if T_LOG_MESSAGE[] is not initial.
l_s_log-object = I_LOG_OBJECT.
l_S_LOG-subobject = I_LOG_OBJECT_inf.
l_ext_no = I_EXTNUMBER.
l_s_log-extnumber = l_ext_no.
l_S_LOG-ALUSER = SY-UNAME.
l_S_LOG-ALPROG = i_prog.
l_S_LOG-aldate = sy-datum.
l_S_LOG-altime = sy-uzeit.
l_S_LOG-aluser = sy-uname.
l_S_LOG-altcode = i_tcod.
* Create the log with header data
CALL FUNCTION 'BAL_LOG_CREATE'
EXPORTING
i_s_log = l_s_log
IMPORTING
E_LOG_HANDLE = l_log_handle
EXCEPTIONS
LOG_HEADER_INCONSISTENT = 1
OTHERS = 2.
IF sy-subrc <> 0.
case sy-subrc.
when 1.
raise LOG_HEADER_INCONSISTENT.
when others.
raise LOGGING_ERROR.
endcase.
ENDIF.
l_s_mdef-log_handle = l_log_handle.
* Set the default value
CALL FUNCTION 'BAL_GLB_MSG_DEFAULTS_SET'
EXPORTING
i_s_msg_defaults = l_s_mdef
EXCEPTIONS
OTHERS = 0.
* Loop the message table and write the messages into the log
loop at T_LOG_MESSAGE.
* Issue the message in a dummy variable
message ID T_LOG_MESSAGE-MSGID type t_log_message-MSGTYP number T_LOG_MESSAGE-MSGNR
with t_log_message-MSGV1 t_log_message-MSGV2
t_log_message-MSGV3 t_log_message-MSGV4
into l_dummy.
* The parameters set by message statement will be used
* Add the message in the log
PERFORM msg_add USING l_log_handle.
endloop.
append l_log_handle to lt_log_handle.
* save logs in the database
CALL FUNCTION 'BAL_DB_SAVE'
EXPORTING
* I_SAVE_ALL = 'X'
* I_IN_UPDATE_TASK = 'X'
I_T_LOG_HANDLE = lt_log_handle
EXCEPTIONS
LOG_NOT_FOUND = 1
SAVE_NOT_ALLOWED = 2
NUMBERING_ERROR = 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.
commit work.
endif.
ENDFUNCTION.
*--------------------------------------------------------------------
* FORM MSG_ADD
*--------------------------------------------------------------------
* Add the message to the log
*-------------------------------------------------------------------*
FORM msg_add USING i_log_handle TYPE balloghndl.
DATA:
l_s_msg TYPE bal_s_msg.
* define data of message for Application Log
l_s_msg-msgty = sy-msgty.
l_s_msg-msgid = sy-msgid.
l_s_msg-msgno = sy-msgno.
l_s_msg-msgv1 = sy-msgv1.
l_s_msg-msgv2 = sy-msgv2.
l_s_msg-msgv3 = sy-msgv3.
l_s_msg-msgv4 = sy-msgv4.
* add this message to log file
* (I_LOG_HANDLE is not specified, we want to add to the default log.
* If it does not exist we do not care =>EXCEPTIONS log_not_found = 0)
CALL FUNCTION 'BAL_LOG_MSG_ADD'
EXPORTING
I_LOG_HANDLE = i_log_handle
i_s_msg = l_s_msg
EXCEPTIONS
log_not_found = 0
OTHERS = 1.
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. "msg_add
Nota para leer todos los log desde la SLG1
Al parecer no hay forma standard de visualizar todos los logs sin tener que navegar, entonces, les presento un pequeño truco:
Ir a la funcion APPL_LOG_DISPLAY (SE37), buscar el siguiente codigo
IF NOT i_s_display_profile IS INITIAL.
l_s_display_profile = i_s_display_profile.
ELSE.
IF number_of_protocols = 1.
CALL FUNCTION 'BAL_DSP_PROFILE_SINGLE_LOG_GET'
IMPORTING
e_s_display_profile = l_s_display_profile
EXCEPTIONS
OTHERS = 0.
ELSE.
CALL FUNCTION 'BAL_DSP_PROFILE_STANDARD_GET'
IMPORTING
e_s_display_profile = l_s_display_profile
EXCEPTIONS
OTHERS = 0.
ENDIF.
ENDIF.
colocar un BREKPOINT. Entonces ejecutamos la SLG1 y cuando lleguemos a
la linea, cambiamos al valor de la variable number_of_protocols por '1'
y voilà
Programas ejemplo
SBAL_DEMO*, por ejemplo SBAL_DEMO_04_DETLEVEL
No hay comentarios:
Publicar un comentario
Nota: solo los miembros de este blog pueden publicar comentarios.