当前位置: 首页 > article >正文

使用 ABAP 进行应用程序日志记录

当客户发出一条信息,而你却不确定是什么地方出了问题时,总是很头疼!!!

此时,如果有应用程序日志记录,就能很好地跟踪和检查哪些代码可能触发了问题。

应用程序日志在以下情况下也很有用:
1…当您想记录应用程序的执行进度,以便在必要时进行重构时
2…当您不确定/无法调试代码(前台/后台),并希望深入查找错误原因时。在这种情况下,您可以轻松检查应用程序日志,并确定问题的确切位置。

下面我们就来看看如何创建应用程序日志。

事务代码: SLG0 用于创建一个用于标识日志的对象。

因此,我在这里创建了一个名为 ZHR_ENC 的应用程序日志对象: ZHR_ENC

和一个子对象 ZHRENC_SUB

就像这样: 我想创建一个用于国家管理的应用程序日志。在国家内部,只要应用程序与特定的状态相关,我就会根据状态创建子对象。我将根据国家创建子对象。

完成对象和子对象的创建后,就该编写实际创建应用程序日志的代码了。

您可以将下面的代码写入增强程序/用户退出程序/报告程序(任何自定义代码),以便在执行时生成日志。

(为测试目的,只需将以下代码复制到报告程序 ZTST_APPL_LOG 中即可)

*&---------------------------------------------------------------------*
*& Report  ZTST_APPL_LOG
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT ZTST_APPL_LOG.

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 "将信息保存到数据库中。

注:这里我使用的是标准报文类 BPFS(报文编号:006),如果系统中没有该类报文,则使用事务代码 SE91 创建一个新的报文,或重复使用任何现有报文。

执行创建的报告: 您可以使用事务代码:SLG1 来监控基于对象的应用程序日志。

因此,现在当客户提出 Ticket 时,您可以做的第一步就是:检查生产中的应用程序日志。检查生产中的应用程序日志,这样你就能清楚地知道可能出了什么问题。

原文链接:

  • https://community.sap.com/t5/application-development-blog-posts/application-logging-using-abap/ba-p/13218394

http://www.kler.cn/a/454906.html

相关文章:

  • 桥接模式详解
  • 后端项目打包发布
  • 湖南科技大学-计算机学院-毕业设计选题详细信息(2024)
  • 智慧农业应用场景|珈和科技农业调查解决方案
  • LaTeXChecker:使用 Python 实现以主 TEX 文件作为输入的 LaTeX 检查和统计工具
  • C#控件开发3—文本显示、文本设值
  • Ubuntu 22.04.5 修改IP
  • 面试突击-JAVA集合类(持续更新...)
  • 【SQL】筛选某一列字段中,截取含有关键词“XX”字段位置的前4个字段,去重后查看字段
  • PDF书籍《手写调用链监控APM系统-Java版》第11章 插件与链路的结合:HttpClient插件实现跨进程传输TraceSegment
  • OpenCV-Python实战(8)——图像变换
  • 探索基金聚合平台的背景与发展:Finanzen.net、Franklin Templeton、Finect
  • STM32完全学习——FATFS0.15移植SD卡
  • AI客服机器人如何帮助企业应对高峰期客户咨询压力?
  • LeetCode--239.滑动窗口最大值(使用双端队列解决)
  • docker拉取rabbitmq镜像时报Client.Timeout exceeded while awaiting header错误处理办法
  • Linux-Ubuntu之串口通信
  • ChatGPT助力数据可视化与数据分析效率的提升(二)
  • lua debug相关方法详解
  • leetcode82:删除链表中的重复元素II