云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

数据库服务器_阿里金融云_学生机

小七 141 0

数据库服务器_阿里金融云_学生机

作为一名经验丰富的故障排除专家,您肯定会遇到ABAP语句日志点。在ABAP中使用语句LOG-POINT可以

但是由于这种日志记录使用专用的ABAP语句,所以必须事先准备好源代码。但是,有很多ABAP代码,还没有准备好进行日志记录。

如果您需要分析这些代码而不可能对其进行更改(例如在生产系统中),该怎么办?

使用动态日志点(SAP NW ABAP 7.5提供),您现在可以在任意源代码位置,甚至在生产系统(只要您有必要的权限)动态设置日志点,大数据啥意思,就像设置断点一样。要设置动态日志点,只需右击源代码行旁边的标记栏,通常设置断点的位置。在上下文菜单中,只需单击"添加日志点…"。

在"添加日志点"对话框中,您可以为不同的用例选择不同的预定义活动,如"记录简单变量值"、"记录调用堆栈"等,或者您可以使用更高级的"用户定义日志记录",您可以在其中输入要记录的变量聚合和一个自由风格的可选条件。

但是让我们先看一个简单的例子。

事务SE16使用功能模块RS\ U TABLE\ U LIST\ U CREATE创建、生成和调用显示单个数据库表内容所需的ABAP报告。它采用一个参数表名称,这是要显示的数据库表的名称。

我们现在想知道,哪些数据库表在我们的系统中显示以及显示的频率。

因此,在功能模块RS\u TABLE\u LIST\u CREATE的第一个可执行行设置一个动态日志点,为您的日志点选择活动"Log Simple Variable"并指定变量表名称作为要记录的变量:

不限制特定用户或应用服务器的logpoint激活。只需保持"激活"部分不变,如何租用服务器,然后按"完成"。现在,所有服务器上的所有用户都激活了您的日志点,系统会为您收集日志数据。

在源代码中,您现在可以在标记栏中看到红色的日志点符号。将鼠标悬停在符号上方,您将一眼看到logpoint属性。

过了一会儿,您想查看日志结果,请切换到logpoint视图。使用"收集日志…"按钮刷新显示:

在这里描述的示例中,经过一段时间收集了7个日志事件。

如果您现在突出显示RS\U TABLE\U LIST\U CREATE的日志点条目,结果显示将出现在日志点视图的右侧:

您现在可以看到各个数据库表的名称以及如何创建它们通常使用事务SE16显示在系统中。

如果您需要更改特定服务(例如功能模块或方法)的行为,您应该知道是谁在调用它。直接调用方的信息有时可能是足够的,但通常需要知道完整的ABAP调用堆栈,以便进行更深入的分析。

我们如何使用动态日志点来处理这样的任务?

假设我们对一项特殊服务感兴趣,即UTC时间戳转换为方法CL\U ABAP\U TSTMP=>SYSTEMTSTMP\U UTC2SYST中实现的系统时间。我们现在想分析一下,谁在打电话,多久打一次。

这很简单。只需在方法实现的第一行设置一个动态logpoint,使用预定义的活动"Log Call Stack"。

激活logpoint,过一会儿切换到logpoint视图查看结果。

可能是这样的。

在结果显示的左侧可以找到哈希键值,代表从所有单个ABAP堆栈层次结构调用方法CL\u ABAP\u TSTMP=>SYSTEMTSTMP\u UTC2SYST。右侧的"日志事件"列告诉您这种情况发生的频率。如果导航到一个结果显示行的详细信息,您可以在"字段值"列中看到所涉及的ABAP堆栈。

因此您只需单击几下,就可以获得有关系统中调用专用服务的频率和调用者的完整信息,以及有关ABAP调用堆栈的详细信息。

但现在您可能会问自己:

哈希键值来自何处,是什么它们对你有好处吗?

要回答这个问题,商业大数据分析,我们首先需要在下一个示例中查看更高级的活动"用户定义日志"。

在这个示例中,您将看到检测系统中使用ALV的事务以及它们显示的列表项的数量是多么容易。ALV显示的内容也很容易添加。

要实现这一点,您应该使用"用户定义日志"活动,输入字段"键定义"、"字段值"和"可选条件"。

现在在功能模块重用\ ALV \网格\显示的第一个可执行行设置动态日志点。参数T_OUTTAB包含要显示的数据。

在键定义中指定内置函数req_type()和req_entrypoint(),它们返回请求类型和当前请求的名称(例如"TA"和"SM50")。然后使用文字"ALV lines:"以获得更好的可读性,最后,内置函数lines()将表T\u OUTTAB[]的行数放入键字符串中。

在字段值部分指定表T\u OUTTAB[]的第一行,只是为了了解当前事务中显示的数据类型。

最后但并非最不重要的是,您可能希望将日志记录限制为特定用户,这可以在上述条件下完成。

经过一段时间后,您会得到如下结果:

您现在可以清楚地看到哪些请求/事务正在使用ALV,它们使用了多少行正在显示它们以及它们在系统中被调用的频率。

在本例中,我们使用了内置函数

但是还有更多。

其他有用的内置函数是例如

stack\u hash()函数返回当前ABAP堆栈的哈希键,函数stack()在一个内部表中传递当前的ABAP堆栈。

现在您可以理解,示例2中的活动"Log Call stack"正在做什么:它用stack\u hash()预先填充"Key Definition"输入字段,并将函数stack()写入"field Values"。