ABAP--如何在abap中使用日志管理
sap提供标准函数来操作应用日志,这篇文章将详细介绍如何使用应用日志。
1、相关TCODE
•SLG0 -> Used to maintain the log object
•SLG1 -> Used to view the log
2、配置步骤
1)运行SLG0,系统将弹出一个提示窗口,点击"OK"按钮;
2)点击"新增"按钮,在对象名中输入"ZTESTLOG",在描述中"Test Log",并点击"保存"按钮;
3、开发步骤
1)用SE11创建一个结构Z_LOG_MESSAGE,结构的字段如下:
Component | Component Type |
MSGTY | SYMSGTY |
MSG_TEXT_1 | SYMSGV |
MSG_TEXT_2 | SYMSGV |
MSG_TEXT_3 | SYMSGV |
MSG_TEXT_4 | SYMSGV |
2)用SE91创建消息类ZMESSAGE,并在999输入四个占位符(&)
3)用SE37创建函数族"ZLOG"
4)在创建函数组后创建函数"ZIU_MESSAGE_LOGGING"
IMPORT PARAMETERS:
I_LOG_OBJECT type BALOBJ_D -> Application log: Object name (Application code)
I_EXTNUMBER type String -> Application Log: External ID
Export parameters: None
Changing parameters: None
Tables parameters:
T_LOG_MESSAGE type Z_LOG_MESSAGE
Exceptions:
LOG_HEADER_INCONSISTENT
LOGGING ERROR
代码如下:
FUNCTION ZIU_MESSAGE_LOGGING.
*"----------------------------------------------------------------------
*"*"Local interface:
*" IMPORTING
*" REFERENCE(I_LOG_OBJECT) TYPE BALOBJ_D
*" REFERENCE(I_EXTNUMBER) TYPE STRING
*" TABLES
*" T_LOG_MESSAGE STRUCTURE Z_LOG_MESSAGE
*" EXCEPTIONS
*" LOG_HEADER_INCONSISTENT
*" LOGGING_ERROR
*"----------------------------------------------------------------------
* Author :Ashim Chowdhury
* DESCRIPTION: This function module is used insert messages in the
* application log
CONSTANTS: c_message TYPE syst-msgid VALUE 'ZMESSAGE',
c_999 TYPE syst-msgno VALUE '999'.
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.
if T_LOG_MESSAGE[] is not initial.
l_s_log-object = I_LOG_OBJECT.
l_ext_no = I_EXTNUMBER.
l_s_log-extnumber = l_ext_no.
* 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.
* Use the message type ZMESSAGE and msg no 999
* Issue the message in a dummy variable
message ID C_message type t_log_message-MSGTY number C_999
with t_log_message-MSG_TEXT_1 t_log_message-MSG_TEXT_2
t_log_message-MSG_TEXT_3 t_log_message-MSG_TEXT_4
into l_dummy.
* The parameters set by message statement will be used
* Add the message in the log
PERFORM msg_add.
endloop.
* save logs in the database
CALL FUNCTION 'BAL_DB_SAVE'
EXPORTING
I_SAVE_ALL = 'X'
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.
endif.
ENDFUNCTION.
*--------------------------------------------------------------------
* FORM MSG_ADD
*--------------------------------------------------------------------
* Add the message to the log
*-------------------------------------------------------------------*
FORM msg_add.
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_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.
5)在程序中使用ZIU_MESSAGE_LOGGING函数来维护应用日志,代码如下
Data declaration->
* Internal table for message logging
DATA: it_log_message TYPE STANDARD TABLE OF z_log_message,
wa_log_message TYPE z_log_message,
l_ext_number TYPE string.
Constants:
c_obj_zxiproxy TYPE balobj_d VALUE 'ZTESTLOG'.
* Now populate the internal table with the log messages as shown below. wa_log_message-
* msgty is the type of the message.
* E -> Error, W -> Warning, S -> Success
* Logging code for insert message into log
CLEAR wa_log_message.
wa_log_message-msgty = 'E'. “ Can use W or S
wa_log_message-msg_text_1 = < Message text 1>.
wa_log_message-msg_text_2 = < Message text 2>
wa_log_message-msg_text_3 = < Message text 3>
wa_log_message-msg_text_4 = < Message text 4>
* Append the message into the internal table
APPEND wa_log_message TO it_log_message.
At the end transfer the log message to the system log by calling function module ZIU_MESSAGE_LOGGING. L_EXT_NUMBER will bt any string of your choice.
* Function module ZIU_MESSAGE_LOGGING will do the logging
* i_log_object is the object type (to be configrd using txn SLG0
CALL FUNCTION 'ZIU_MESSAGE_LOGGING'
EXPORTING
i_log_object = c_obj_zxiproxy
i_extnumber = l_ext_number
TABLES
t_log_message = it_log_message
EXCEPTIONS
log_header_inconsistent = 1
logging_error = 2
OTHERS = 3.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDIF.
4、使用TCODE:SLG1查看应用日志。