SAP ABAP Application Log 的使用场景:
(1) 当你想记录应用程序的执行进度,以便以后在需要时重建它;
(2) 当开发人员不确定/无法调试代码(前台/后台)并且想深入了解错误原因时,可以通过检查应用程序日志来确定问题所在的确切位置。
使用事物码 SLG0 创建一个对象,该对象用于识别开发人员在 ABAP 代码里使用的 Application log.
这里创建一个名叫 ZHR_ENC 的应用程序日志对象。
再创建一个子对象 ZHRENC_SUB。
这里的场景是,为 COUNTRY 管理创建一个应用程序日志。Country 可以包含不同的 State,这些 State 的执行情况,通过子对象 ZHRENC_SUB 来记录。
测试代码:
type-pools: abap. data: l_log_handle type balloghndl, l_timestamp type tzntstmps, l_timezone type timezone value ‘UTC’, l_str_log type bal_s_log, l_str_balmsg type bal_s_msg, l_str_message type bapiret2, l_msg_logged type boolean, l_tab_messages type bapiret2_t. *-Building messages *–Use your own message which you want to Display in the log do 1 times. call function ‘BALW_BAPIRETURN_GET2’ exporting type = ‘E’ cl = ‘BPFS’ number = ‘006’ importing return = l_str_message. append l_str_message to l_tab_messages. clear l_str_message. enddo. *-Logging messages convert date sy–datum time sy–uzeit into time stamp l_timestamp time zone l_timezone. l_str_log–extnumber = l_timestamp. condense l_str_log–extnumber. l_str_log–object = ‘ZHR_ENC’. l_str_log–subobject = ‘ZHRENC_SUB’. l_str_log–aldate_del = sy–datum + 5. call function ‘BAL_LOG_CREATE’ exporting i_s_log = l_str_log importing e_log_handle = l_log_handle exceptions log_header_inconsistent = 1 others = 2. if sy–subrc <> 0. message id sy–msgid type sy–msgty number sy–msgno with sy–msgv1 sy–msgv2 sy–msgv3 sy–msgv4 into l_str_message–message. write: ‘Type’,sy–msgty, ‘Message’,l_str_message–message. else. loop at l_tab_messages into l_str_message. move: l_str_message–type to l_str_balmsg–msgty, l_str_message–id to l_str_balmsg–msgid, l_str_message–number to l_str_balmsg–msgno, l_str_message–message_v1 to l_str_balmsg–msgv1, l_str_message–message_v2 to l_str_balmsg–msgv2, l_str_message–message_v3 to l_str_balmsg–msgv3, l_str_message–message_v4 to l_str_balmsg–msgv4. call function ‘BAL_LOG_MSG_ADD’ exporting i_log_handle = l_log_handle i_s_msg = l_str_balmsg importing e_msg_was_logged = l_msg_logged 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 into l_str_message–message. write: ‘Type’,sy–msgty, ‘Message’,l_str_message–message. endif. endloop. if sy–subrc eq 0. call function ‘BAL_DB_SAVE’ exporting i_save_all = abap_true 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 into l_str_message–message. write: ‘Type’,sy–msgty, ‘Message’,l_str_message–message. else. write: ‘Messages Saved in the log’. endif. endif. endif. write : ‘done with log number’,l_str_log–extnumber.
在上面的代码中:
- BAL_LOG_CREATE:创建应用程序日志对象
- BAL_LOG_MSG_ADD:它将消息添加到应用程序日志记录对象/子对象
- BAL_DB_SAVE:将消息保存到数据库中。
可以使用事务代码 SLG1
来监视基于对象的应用程序日志记录。