In a development environment the debugger is a great tool, but it has it's limits: when the debugging needs to be done in a background process the actual debugging session cannot address an end-user (the developer in this case). Or when it's performance info the needs to be "logged". Debug information to a logging file...
As a blue-print description: A simple program that can be called from other programs via a perform call. It logs a message and allows viewing of the log, as well as removing the log.
Goal and objectives
A developer needs his or her tools and how to use them. This is merely a tool that allows debugging without debugger (especially handy with background processes).
The blue print
A simple concept is usually the key to a strong solution. Imagine a program that can be called from anywhere which put a log entry (text line) on a text file. Log entries will be date and time-stamped and deviating from the (hardcoded) standard log file is possible (isolate your own stuff from other developers). The program allows reading it and of course clearing (removing) it again.
The coding below goes into a single program source:
*--------------------------------------------------------- * Report - ZULOG * Description - <description (copied from attributes)> *--------------------------------------------------------- REPORT ZULOG NO STANDARD PAGE HEADING LINE-SIZE 255. * This report logs an entry into a flat file when routine The texts read:
START-OF-SELECTION. IF P_DELETE EQ 'X'. PERFORM DELETE_LOG. ELSE. PERFORM SHOW_LOG. ENDIF. TOP-OF-PAGE. perform top_of_page. TOP-OF-PAGE DURING LINE-SELECTION. perform top_of_page. AT USER-COMMAND. SY-LSIND = 0. PERFORM SHOW_LOG. AT LINE-SELECTION. SY-LSIND = 0. PERFORM SHOW_LOG. form top_of_page. WRITE: 'File:', p_file. ULINE. endform. *--------------------------------------------------------- * FORM delete_log *--------------------------------------------------------- FORM DELETE_LOG. DELETE DATASET P_FILE. ENDFORM. *--------------------------------------------------------- * FORM show_log *--------------------------------------------------------- FORM SHOW_LOG. DATA: L_LOG_LINE(120). OPEN DATASET P_FILE FOR INPUT IN TEXT MODE ENCODING DEFAULT. IF SY-SUBRC NE 0. WRITE: / 'Logfile not found: ', P_FILE. ELSE. WHILE SY-SUBRC EQ 0. READ DATASET P_FILE INTO L_LOG_LINE. WRITE: / L_LOG_LINE. ENDWHILE. CLOSE DATASET P_FILE. ENDIF. ENDFORM. *--------------------------------------------------------- * FORM add_entry *--------------------------------------------------------- FORM ADD_ENTRY USING FILENAME ENTRY. * perform add_entry(zwimlog) using space 'whatever'. DATA: L_LINE(250), L_FILE(60), L_ENTRY(80). L_ENTRY = ENTRY. CONDENSE L_ENTRY. IF FILENAME EQ SPACE. L_FILE = C_FILE. ELSE. L_FILE = FILENAME. ENDIF. OPEN DATASET L_FILE FOR APPENDING IN TEXT MODE ENCODING DEFAULT. WRITE SY-DATUM TO L_LINE DD/MM/YYYY. WRITE SY-UZEIT TO L_LINE+11 USING EDIT MASK '__:__:__'. CONCATENATE L_LINE L_ENTRY INTO L_LINE SEPARATED BY SPACE. TRANSFER L_LINE TO L_FILE. CLOSE DATASET L_FILE. ENDFORM. |
Pro's and cons
|
Success story
This program was used by several developers on a 2 year implementation. Similar constructions have been around on nearly implementation I've been on.