Release 10.1A: OpenEdge Development:
Debugging and Troubleshooting

> ## 4GLTrace logging

> Specifying the 4GLTrace log entry type turns on logging for the execution of internal procedures, user-defined functions, persistent triggers, and named events (generated by the `RUN`, `FUNCTION`, `PUBLISH`, or `SUBSCRIBE` statements, respectively). It also logs the instantiation of classes (generated by the `NEW` statement), the invocation of super classes and methods (generated by the `METHOD` invocation syntax), and the deletion of classes (generated by the `DELETE OBJECT` statement). 4GL Trace logging is available on all OpenEdge clients including GUI clients, character clients, WebSpeed agents, and AppServer agents. Log entries generated for this type contain the tag `4GLTrace`.

> 4GL Trace logging logs an entry message when execution of a an internal procedure, user-defined function, persistent user-interface trigger, named events, classes, methods, `PUBLISH` statement, and `SUBSCRIBE` statement begins. Information is logged at Level 2 (Basic) and higher. 4GL Trace logging logs a to indicate the application returned. Return messages are logged at Level 3 (Verbose) and higher.

> The general format for 4GLTrace logging entry messages is:

>     type routine-name [PERS TRIG] [in routine-name] [PERSIST] "input-param"
>     [caller - source @ line-number]

> ``type``

> The following table lists the entry type and description:

> Type | Description
> --- | ---
> `Run` | Procedures
> `Function` | User-defined functions
> `Publish` | Published events
> `Subscribe` | Named events
> `Super` | Invocation of super class
> `New` | Instantiation of classes
> `Invoke` | Invocation of methods
> `Delete` | Deletion of classes

> ``routine-name``

> Procedure or function name being executed. For classes, this is the name of the class being instantiated or destroyed, or the name of the invoked method.

> `PERS TRIG`

> Indicates that the procedure runs as a result of a persistent trigger. In this case, this is the only piece of information in the log entry after the `routine-name`.

> `in `routine-name``

> For procedures, logs the calling `routine-name`. For example, `RUN` `xx` `in` `yy` statement, logs `yy` as the `routine-name`. For functions and methods, logs the function or method when the function or method is not located in the caller procedure or class.

> `PERSIST`

> Indicates the `RUN` statement has the `PERSISTENT` clause.

> ``input-param``

> List of input and input-output parameters, each separated by a single space.

> ``caller``

> Indicates where the call to the statement or function is: `Main` block, `SYSTEM-TRIGGER`, or the name of an internal procedure, function or method.

> ``source``

> Indicates the name of the procedure or class which contains the caller.

> `@ `line-number``

> Indicates the line number where the procedure `routine-name` is executed by the caller routine. When implicitly invoking the constructor of the super-class, this is the string `IMPLICIT`.

> For example:

>     4GLTrace Run myproc in myproc2.p "my parameters" [init - foo.p @ 10]

> The following example shows 4GLTrace logging for classes:

>     4GLTrace New temp [Main Block - foo.p @ 10]
>     4GLTrace Super tempbase [temp - temp @ 5]
>     4GLTrace Invoke bar in temp "3" [Main Block - foo.p @ 11]
>     4GLTrace Delete temp [Main Block - foo.p @12]

> The general format for 4GLTrace logging return message is:

>     Return from routine-name "output-param" [program-name]

> ``routine-name``

> Name of internal procedure, function, method, user-interface trigger, `PUBLISH` statement, or `Main Block`.

> ``output-param``

> List of `OUTPUT`, `INPUT-OUTPUT`, and `RETURN` parameters.

> ``program-name``

> Name of program containing called procedure.

> For example:

>     4GLTrace Return from myproc "my parameters" [myproc2.p]

Copyright © 2005 Progress Software Corporation www.progress.com Voice: (781) 280-4000 Fax: (781) 280-4095