home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / tolkit45.zip / os2tk45 / samples / sysmgt / errlog / errlog1 / errlog1.c next >
C/C++ Source or Header  |  1999-05-11  |  7KB  |  187 lines

  1. /****************************************************************************************/
  2. /* The following example demonstrates the use of the logging functions to do the        */
  3. /* following operations.                                                                */
  4. /* 1. Opens the default log file                                                        */
  5. /* 2. Reads an entry from the log file using a filter.  The filter is set up so that    */
  6. /*    a record where the DMI_VENDOR_TAG field contains IBM-PSP, or the severity field   */
  7. /*    is greater than 2 will be read.
  8. /* 3. Formats the record                                                                */
  9. /* 4. Closes the log file                                                               */
  10. /****************************************************************************************/
  11.  
  12. /* The following example opens the default error log file (1) */
  13.  
  14. #define INCL_LOGGING
  15. #include <unidef.h>
  16. #include <os2.h>
  17. #include <stdio.h>
  18. #include <lfdef.h>
  19. #define STRING_BUFFER_LENGTH 4096
  20. #define MAX_FILENAME_LENGTH 255
  21.            
  22. int main()
  23. {
  24.  
  25.   /* variables used throughout */
  26.  
  27.   APIRET rc;                      /* return code */
  28.   ULONG service;
  29.   BYTE log_entry_buffer[2048];
  30.  
  31.   /* variables for open/close */
  32.  
  33.   UniChar filename[256];
  34.   ULONG filename_length;
  35.   ULONG log_file_ID;
  36.   LOFREQUEST open_file_packet;
  37.  
  38.   /* variables for LogCloseFile */
  39.  
  40.   LCFREQUEST close_file_packet;
  41.  
  42.   /* variables for read */
  43.  
  44.   ULONG severity = 2;
  45.   LREREQUEST read_entry_packet;
  46.   EVENTKEY EventKey;
  47.   ULONG log_entry_buffer_length;
  48.   SUBBLOCK subblock1, subblock2;
  49.   HEADERBLOCK headerblock1, headerblock2;
  50.   FILTERBLOCK filter;
  51.   UniChar *manufacturer_name = L"IBM-PSP";
  52.  
  53.   /* variables for format */
  54.  
  55.   LFEREQUEST format_entry_packet;
  56.   UniChar string_buffer[4096];
  57.   ULONG string_buffer_length;
  58.   LocaleObject lo;
  59.   ULONG number_of_detail_recs;
  60.  
  61.   service = ERROR_LOGGING_SERVICE;
  62.  
  63.   /**************************************************************/
  64.   /* The following section of code opens the default log file   */
  65.   /**************************************************************/
  66.  
  67.   log_file_ID = 1;
  68.   filename_length = MAX_FILENAME_LENGTH;
  69.  
  70.   /* Construct the LogOpenFile parameter packet */
  71.   open_file_packet.packet_size = sizeof(LOFREQUEST);
  72.   open_file_packet.packet_revision_number = LF_UNI_API;
  73.   open_file_packet.log_file_ID = &log_file_ID;
  74.   open_file_packet.filename_length = &filename_length;
  75.   open_file_packet.filename = &filename;
  76.  
  77.   rc = LogOpenFile(service, &open_file_packet);
  78.  
  79.   if (rc == 0)
  80.     printf("Log File opened successfully\n");
  81.   else {
  82.     printf("LogOpenFile error: return code %d\n",rc);
  83.     return rc;
  84.   }
  85.  
  86.   /**************************************************************/
  87.   /* The following section of code reads an entry from the file */
  88.   /**************************************************************/
  89.  
  90.    /*  Construct an event notification filter with 2 header blocks.    */
  91.  
  92.    filter.packet_size = sizeof(FILTERBLOCK);
  93.    filter.packet_revision_number = LF_UNI_API;
  94.    filter.header_block = &headerblock1;
  95.  
  96.    /*-------------construct headerblock1---------------------*/
  97.    headerblock1.pSubblock = &subblock1;
  98.    headerblock1.pNextBlock = &headerblock2;
  99.  
  100.    /*construct first subblock of headerblock1*/
  101.    subblock1.entry_attribute_ID = LOG_ERROR_DMI_VENDOR_TAG;
  102.    subblock1.comparison_operator_ID = LOG_ERROR_EQUAL;
  103.    subblock1.comparison_data_ptr = manufacturer_name;
  104.    subblock1.comparison_data_length = UniStrlen(manufacturer_name)*2;
  105.    subblock1.next_subblock = NULL;
  106.  
  107.    /*------------construct headerblock2----------------------*/
  108.    headerblock2.pSubblock = &subblock2;
  109.    headerblock2.pNextBlock = NULL;
  110.  
  111.    /*construct first subblock of headerblock2*/
  112.    subblock2.entry_attribute_ID = LOG_ERROR_SEVERITY;
  113.    subblock2.comparison_operator_ID = LOG_ERROR_GREATER_THAN;
  114.    subblock2.comparison_data_ptr = &severity;
  115.    subblock2.comparison_data_length = sizeof(ULONG);
  116.    subblock2.next_subblock = NULL;
  117.  
  118.    /* Construct the LogReadEntry parameter packet. */
  119.    read_entry_packet.packet_size = sizeof(LREREQUEST);
  120.    read_entry_packet.packet_revision_number = LF_UNI_API;
  121.    read_entry_packet.log_file_ID = *(open_file_packet.log_file_ID);
  122.    read_entry_packet.flags = START_AT_FIRST_ENTRY;
  123.    read_entry_packet.pEventKey = &EventKey;
  124.    read_entry_packet.pFilter = &filter;
  125.    log_entry_buffer_length = sizeof(log_entry_buffer);
  126.    read_entry_packet.pLogEntryBufferLength = &log_entry_buffer_length;
  127.    read_entry_packet.pLogEntryBuffer = &log_entry_buffer;
  128.  
  129.    rc = LogReadEntry(service, &read_entry_packet);
  130.  
  131.    if (rc == 0)
  132.       printf("LogReadEntry was successful\n");
  133.    else {
  134.       printf("LogReadEntry error: return code = %d",rc);
  135.       return rc;
  136.    }
  137.  
  138.   /**************************************************************/
  139.   /* The following section of code formats the log entry        */
  140.   /**************************************************************/
  141.  
  142.    string_buffer_length = STRING_BUFFER_LENGTH;
  143.  
  144.    rc=UniCreateLocaleObject(UNI_UCS_STRING_POINTER,(UniChar*)L"",&lo);
  145.    if (rc == 0)
  146.       printf("Locale object was created successfully\n");
  147.    else 
  148.       printf("UniCreateLocaleObject error: return code = %d",rc);
  149.  
  150.    /* Construct the Error Log Service format packet  */
  151.    format_entry_packet.packet_size = sizeof(LFEREQUEST);
  152.    format_entry_packet.packet_revision_number = LF_UNI_API;
  153.    format_entry_packet.log_entry_buffer =  &log_entry_buffer;
  154.    format_entry_packet.flags = ERR_FORMAT_DETAIL_DATA;
  155.    format_entry_packet.locale_object = lo;
  156.    format_entry_packet.string_buffer_length = &string_buffer_length;
  157.    format_entry_packet.string_buffer =  &string_buffer;
  158.    format_entry_packet.number_of_detail_records = &number_of_detail_recs;
  159.  
  160.    rc = LogFormatEntry(service, &format_entry_packet) ;
  161.  
  162.    if (rc == 0)
  163.      printf("LogFormatEntry was successful\n");
  164.    else {
  165.      printf("LogFormatEntry error: return code = %d",rc);
  166.      return rc;
  167.    }
  168.  
  169.   /*****************************************************/
  170.   /* The following section of code closes the log file */
  171.   /*****************************************************/
  172.  
  173.   /* Construct the LogCloseFile parameter packet  */
  174.   close_file_packet.packet_size = sizeof(LCFREQUEST);
  175.   close_file_packet.packet_revision_number = LF_UNI_API;
  176.   close_file_packet.log_file_ID = *(open_file_packet.log_file_ID); /* from LogOpenFile call */
  177.  
  178.   rc = LogCloseFile(service, &close_file_packet);
  179.  
  180.   if (rc == 0) 
  181.     printf("Log File closed successfully\n");
  182.   else 
  183.     printf("LogCloseFile error: return code %d\n",rc);
  184.  
  185.   return rc;
  186. }
  187.