<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://sapwiki.cl/wiki/index.php?action=history&amp;feed=atom&amp;title=SAP_ABAP_LOG</id>
	<title>SAP ABAP LOG - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://sapwiki.cl/wiki/index.php?action=history&amp;feed=atom&amp;title=SAP_ABAP_LOG"/>
	<link rel="alternate" type="text/html" href="https://sapwiki.cl/wiki/index.php?title=SAP_ABAP_LOG&amp;action=history"/>
	<updated>2026-10-26T11:18:54Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.34.0</generator>
	<entry>
		<id>https://sapwiki.cl/wiki/index.php?title=SAP_ABAP_LOG&amp;diff=629&amp;oldid=prev</id>
		<title>WikiSysop: Created page with &quot;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.  *&quot;-------------...&quot;</title>
		<link rel="alternate" type="text/html" href="https://sapwiki.cl/wiki/index.php?title=SAP_ABAP_LOG&amp;diff=629&amp;oldid=prev"/>
		<updated>2020-04-10T20:02:07Z</updated>

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