IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 1153


Ignore:
Timestamp:
Jun 30, 2004, 10:22:37 AM (22 years ago)
Author:
desonia
Message:

task g616 - the ability to specify a protocol "file" with a pathname to
write log messages to a file.

Fixed psLogSetDestination to match SDRS.

-rdd

Location:
trunk/psLib/src
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/psLib/src/sys/psLogMsg.c

    r1143 r1153  
    1111 *  @author George Gusciora, MHPCC
    1212 *
    13  *  @version $Revision: 1.19 $ $Name: not supported by cvs2svn $
    14  *  @date $Date: 2004-06-30 02:07:47 $
     13 *  @version $Revision: 1.20 $ $Name: not supported by cvs2svn $
     14 *  @date $Date: 2004-06-30 20:22:37 $
    1515 *
    1616 *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     
    4545
    4646#define MAX_LOG_LINE_LENGTH 128
    47 static int p_psGlobalLogDest = PS_LOG_TO_STDERR; // where to log messages
    48 static int p_psGlobalLogLevel = PS_LOG_INFO;     // log all messages at this or above
    49 //static FILE *p_logFP = NULL;
    50 // The following variables control
    51 // which information is displayed in
    52 // log messages.
    53 static bool p_psLogTime = true;        // Flag to include time info
    54 static bool p_psLogHost = true;        // Flag to include host info
    55 static bool p_psLogLevel = true;       // Flag to include level info
    56 static bool p_psLogName = true;        // Flag to include name info
    57 static bool p_psLogMsg = true;         // Flag to include message info
     47static FILE* logDest = (FILE*)1;       // flag to initialize to stderr before using.
     48static int globalLogLevel = PS_LOG_INFO; // log all messages at this or above
     49static bool logTime = true;            // Flag to include time info
     50static bool logHost = true;            // Flag to include host info
     51static bool logLevel = true;           // Flag to include level info
     52static bool logName = true;            // Flag to include name info
     53static bool logMsg = true;             // Flag to include message info
     54
    5855/*****************************************************************************
    5956psLogSetLevel(): Set the current log level and return old level.
     
    6865{
    6966    // Save old global log level for changing it.
    70     int oldLevel = p_psGlobalLogLevel;
     67    int oldLevel = globalLogLevel;
    7168
    7269    if ((level < MIN_LOG_LEVEL) || (level > MAX_LOG_LEVEL)) {
     
    7774
    7875    // Set new global log level
    79     p_psGlobalLogLevel = level;
     76    globalLogLevel = level;
    8077
    8178    // Return old global log level
     
    9592 An integer specifying the old log destination.
    9693 *****************************************************************************/
    97 int psLogSetDestination(int dest)
    98 {
    99     // Save old global log destination before changing it.
    100     int old = p_psGlobalLogDest;
    101 
    102     switch (dest) {
    103     case PS_LOG_NONE:
    104     case PS_LOG_TO_STDOUT:
    105     case PS_LOG_TO_STDERR:
    106         // Set new global log destination
    107         p_psGlobalLogDest = dest;
    108         break;
    109 
    110     default:
    111         // NOTE: Should you log this error properly?
    112         fprintf(stderr,"Unknown p_psGlobalLogDest: %d (ignored)\n", dest);
    113         break;
    114     }
    115 
    116     // Return old global log destination
    117     return old;
    118 }
    119 
    120 
     94int psLogSetDestination(const char* dest)
     95{
     96    char protocol[5];
     97    char location[257];
     98
     99    // if logDest has not been initialized, do so before using it
     100    if (logDest==(FILE*)1) {
     101        logDest = stderr;
     102    }
     103
     104    if (dest == NULL || strcmp(dest,"none")==0) {
     105        if (logDest != NULL && logDest != stderr && logDest != stdout) {
     106            fclose(logDest);
     107        }
     108        logDest = NULL;
     109        return 0;
     110    }
     111
     112    if (sscanf(dest,"%4s:%256s",protocol,location) < 2) {
     113        psError(__func__,"The specified destination, %s, is malformed.", dest);
     114        return 1;
     115    }
     116
     117    if (strcmp(protocol,"dest") == 0) {
     118        if (strcmp(location,"stderr") == 0) {
     119            if (logDest != NULL && logDest != stderr && logDest != stdout) {
     120                fclose(logDest);
     121            }
     122            logDest = stderr;
     123            return 0;
     124        }
     125        if (strcmp(location,"stdout") == 0) {
     126            if (logDest != NULL && logDest != stderr && logDest != stdout) {
     127                fclose(logDest);
     128            }
     129            logDest = stdout;
     130            return 0;
     131        }
     132        psError(__func__,"The location, %s, for protocol 'dest' is invalid.",location);
     133        return 1;
     134    } else if (strcmp(protocol,"file") == 0) {
     135        FILE* file = fopen(location,"w");
     136        if (file == NULL) {
     137            psError(__func__,"Could not open file '%s' for output.",location);
     138            return 1;
     139        }
     140        if (logDest != NULL && logDest != stderr && logDest != stdout) {
     141            fclose(logDest);
     142        }
     143        logDest = file;
     144        return 0;
     145    }
     146
     147    psError(__func__,"Do not know how to handle the protocol '%s'.",protocol);
     148    return 1;
     149}
    121150
    122151/*****************************************************************************
     
    138167{
    139168    // assume nothing desired unless specified
    140     p_psLogHost = false;
    141     p_psLogLevel = false;
    142     p_psLogMsg = false;
    143     p_psLogName = false;
    144     p_psLogTime = false;
     169    logHost = false;
     170    logLevel = false;
     171    logMsg = false;
     172    logName = false;
     173    logTime = false;
    145174
    146175    // if fmt is NULL, no logging is desired.
     
    160189        case 'H':
    161190        case 'h':
    162             p_psLogHost = true;
     191            logHost = true;
    163192            break;
    164193        case 'L':
    165194        case 'l':
    166             p_psLogLevel = true;
     195            logLevel = true;
    167196            break;
    168197        case 'M':
    169198        case 'm':
    170             p_psLogMsg = true;
     199            logMsg = true;
    171200            break;
    172201        case 'N':
    173202        case 'n':
    174             p_psLogName = true;
     203            logName = true;
    175204            break;
    176205        case 'T':
    177206        case 't':
    178             p_psLogTime = true;
     207            logTime = true;
    179208            break;
    180209        default:
     
    184213    }
    185214
    186     if (!p_psLogMsg) {
     215    if (!logMsg) {
    187216        psTrace("utils.logMsg", 1,
    188217                "You must at least log error messages (You chose \"%s\")",
     
    225254    struct tm *utc = gmtime(&clock);    // The current gm time.
    226255
     256    // if logDest has not been initialized, do so before using it
     257    if (logDest==(FILE*)1) {
     258        logDest = stderr;
     259    }
     260
    227261    // If logging is off, or if the level is too high, return immediately.
    228     if ((level > p_psGlobalLogLevel) || (p_psGlobalLogDest == PS_LOG_NONE)) {
     262    if ((level > globalLogLevel) || (logDest == NULL)) {
    229263        return;
    230264    }
     
    270304
    271305    // Create the various log fields...
    272     if (p_psLogTime) {
     306    if (logTime) {
    273307        maxLength -= snprintf(head_ptr, maxLength, "%4d:%02d:%02d %02d:%02d:%02dZ",
    274308                              utc->tm_year + 1900, utc->tm_mon + 1, utc->tm_mday,
     
    277311    }
    278312    // Hostname should be 20 characters.
    279     if (p_psLogHost) {
     313    if (logHost) {
    280314        if (head_ptr > head) {
    281315            *head_ptr++ = '|';
     
    284318        head_ptr += strlen(head_ptr);
    285319    }
    286     if (p_psLogLevel) {
     320    if (logLevel) {
    287321        if (head_ptr > head) {
    288322            *head_ptr++ = '|';
     
    292326    }
    293327    // The name field must be 15 characters.
    294     if (p_psLogName) {
     328    if (logName) {
    295329        if (head_ptr > head) {
    296330            *head_ptr++ = '|';
     
    302336    if (head_ptr > head) {
    303337        *head_ptr++ = '|';
    304     } else if (!p_psLogMsg) { // no output desired
     338    } else if (!logMsg) { // no output desired
    305339        return;
    306340    }
    307341    *head_ptr = '\0';
    308342
    309     switch (p_psGlobalLogDest) {
    310     case PS_LOG_TO_STDOUT:
    311         puts(head);
    312         if (p_psLogMsg) {
    313             vprintf(fmt, ap);
    314             if (fmt[strlen(fmt) - 1] != '\n') {
    315                 putc('\n', stdout);
    316             }
    317         } else {
    318             putc('\n', stdout);
    319         }
    320         break;
    321 
    322     case PS_LOG_TO_STDERR:
    323         fputs(head, stderr);
    324         if (p_psLogMsg) {
    325             vfprintf(stderr, fmt, ap);
    326             if (fmt[strlen(fmt) - 1] != '\n') {
    327                 putc('\n', stderr);
    328             }
    329         } else {
    330             putc('\n', stderr);
    331         }
    332         break;
    333 
    334     default:
    335         fprintf(stderr, "psLogMsg: You cannot get here (%s:%d)\n",
    336                 __FILE__, __LINE__);
    337         abort();
     343    fputs(head, logDest);
     344    if (logMsg) {
     345        vfprintf(logDest, fmt, ap);
     346        if (fmt[strlen(fmt) - 1] != '\n') {
     347            fputc('\n', logDest);
     348        }
     349    } else {
     350        fputc('\n', logDest);
    338351    }
    339352}
  • trunk/psLib/src/sys/psLogMsg.h

    r1138 r1153  
    1111 *  @author George Gusciora, MHPCC
    1212 *
    13  *  @version $Revision: 1.9 $ $Name: not supported by cvs2svn $
    14  *  @date $Date: 2004-06-30 01:17:20 $
     13 *  @version $Revision: 1.10 $ $Name: not supported by cvs2svn $
     14 *  @date $Date: 2004-06-30 20:22:37 $
    1515 *
    1616 *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     
    2929/// In future versions, this procedure will take a character string as an
    3030/// argument which can specify more general log destinations.
    31 int psLogSetDestination(int dest     ///< Specifies where to send messages.
     31int psLogSetDestination(const char* dest   ///< Specifies where to send messages.
    3232                       );
    3333
  • trunk/psLib/src/sysUtils/psLogMsg.c

    r1143 r1153  
    1111 *  @author George Gusciora, MHPCC
    1212 *
    13  *  @version $Revision: 1.19 $ $Name: not supported by cvs2svn $
    14  *  @date $Date: 2004-06-30 02:07:47 $
     13 *  @version $Revision: 1.20 $ $Name: not supported by cvs2svn $
     14 *  @date $Date: 2004-06-30 20:22:37 $
    1515 *
    1616 *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     
    4545
    4646#define MAX_LOG_LINE_LENGTH 128
    47 static int p_psGlobalLogDest = PS_LOG_TO_STDERR; // where to log messages
    48 static int p_psGlobalLogLevel = PS_LOG_INFO;     // log all messages at this or above
    49 //static FILE *p_logFP = NULL;
    50 // The following variables control
    51 // which information is displayed in
    52 // log messages.
    53 static bool p_psLogTime = true;        // Flag to include time info
    54 static bool p_psLogHost = true;        // Flag to include host info
    55 static bool p_psLogLevel = true;       // Flag to include level info
    56 static bool p_psLogName = true;        // Flag to include name info
    57 static bool p_psLogMsg = true;         // Flag to include message info
     47static FILE* logDest = (FILE*)1;       // flag to initialize to stderr before using.
     48static int globalLogLevel = PS_LOG_INFO; // log all messages at this or above
     49static bool logTime = true;            // Flag to include time info
     50static bool logHost = true;            // Flag to include host info
     51static bool logLevel = true;           // Flag to include level info
     52static bool logName = true;            // Flag to include name info
     53static bool logMsg = true;             // Flag to include message info
     54
    5855/*****************************************************************************
    5956psLogSetLevel(): Set the current log level and return old level.
     
    6865{
    6966    // Save old global log level for changing it.
    70     int oldLevel = p_psGlobalLogLevel;
     67    int oldLevel = globalLogLevel;
    7168
    7269    if ((level < MIN_LOG_LEVEL) || (level > MAX_LOG_LEVEL)) {
     
    7774
    7875    // Set new global log level
    79     p_psGlobalLogLevel = level;
     76    globalLogLevel = level;
    8077
    8178    // Return old global log level
     
    9592 An integer specifying the old log destination.
    9693 *****************************************************************************/
    97 int psLogSetDestination(int dest)
    98 {
    99     // Save old global log destination before changing it.
    100     int old = p_psGlobalLogDest;
    101 
    102     switch (dest) {
    103     case PS_LOG_NONE:
    104     case PS_LOG_TO_STDOUT:
    105     case PS_LOG_TO_STDERR:
    106         // Set new global log destination
    107         p_psGlobalLogDest = dest;
    108         break;
    109 
    110     default:
    111         // NOTE: Should you log this error properly?
    112         fprintf(stderr,"Unknown p_psGlobalLogDest: %d (ignored)\n", dest);
    113         break;
    114     }
    115 
    116     // Return old global log destination
    117     return old;
    118 }
    119 
    120 
     94int psLogSetDestination(const char* dest)
     95{
     96    char protocol[5];
     97    char location[257];
     98
     99    // if logDest has not been initialized, do so before using it
     100    if (logDest==(FILE*)1) {
     101        logDest = stderr;
     102    }
     103
     104    if (dest == NULL || strcmp(dest,"none")==0) {
     105        if (logDest != NULL && logDest != stderr && logDest != stdout) {
     106            fclose(logDest);
     107        }
     108        logDest = NULL;
     109        return 0;
     110    }
     111
     112    if (sscanf(dest,"%4s:%256s",protocol,location) < 2) {
     113        psError(__func__,"The specified destination, %s, is malformed.", dest);
     114        return 1;
     115    }
     116
     117    if (strcmp(protocol,"dest") == 0) {
     118        if (strcmp(location,"stderr") == 0) {
     119            if (logDest != NULL && logDest != stderr && logDest != stdout) {
     120                fclose(logDest);
     121            }
     122            logDest = stderr;
     123            return 0;
     124        }
     125        if (strcmp(location,"stdout") == 0) {
     126            if (logDest != NULL && logDest != stderr && logDest != stdout) {
     127                fclose(logDest);
     128            }
     129            logDest = stdout;
     130            return 0;
     131        }
     132        psError(__func__,"The location, %s, for protocol 'dest' is invalid.",location);
     133        return 1;
     134    } else if (strcmp(protocol,"file") == 0) {
     135        FILE* file = fopen(location,"w");
     136        if (file == NULL) {
     137            psError(__func__,"Could not open file '%s' for output.",location);
     138            return 1;
     139        }
     140        if (logDest != NULL && logDest != stderr && logDest != stdout) {
     141            fclose(logDest);
     142        }
     143        logDest = file;
     144        return 0;
     145    }
     146
     147    psError(__func__,"Do not know how to handle the protocol '%s'.",protocol);
     148    return 1;
     149}
    121150
    122151/*****************************************************************************
     
    138167{
    139168    // assume nothing desired unless specified
    140     p_psLogHost = false;
    141     p_psLogLevel = false;
    142     p_psLogMsg = false;
    143     p_psLogName = false;
    144     p_psLogTime = false;
     169    logHost = false;
     170    logLevel = false;
     171    logMsg = false;
     172    logName = false;
     173    logTime = false;
    145174
    146175    // if fmt is NULL, no logging is desired.
     
    160189        case 'H':
    161190        case 'h':
    162             p_psLogHost = true;
     191            logHost = true;
    163192            break;
    164193        case 'L':
    165194        case 'l':
    166             p_psLogLevel = true;
     195            logLevel = true;
    167196            break;
    168197        case 'M':
    169198        case 'm':
    170             p_psLogMsg = true;
     199            logMsg = true;
    171200            break;
    172201        case 'N':
    173202        case 'n':
    174             p_psLogName = true;
     203            logName = true;
    175204            break;
    176205        case 'T':
    177206        case 't':
    178             p_psLogTime = true;
     207            logTime = true;
    179208            break;
    180209        default:
     
    184213    }
    185214
    186     if (!p_psLogMsg) {
     215    if (!logMsg) {
    187216        psTrace("utils.logMsg", 1,
    188217                "You must at least log error messages (You chose \"%s\")",
     
    225254    struct tm *utc = gmtime(&clock);    // The current gm time.
    226255
     256    // if logDest has not been initialized, do so before using it
     257    if (logDest==(FILE*)1) {
     258        logDest = stderr;
     259    }
     260
    227261    // If logging is off, or if the level is too high, return immediately.
    228     if ((level > p_psGlobalLogLevel) || (p_psGlobalLogDest == PS_LOG_NONE)) {
     262    if ((level > globalLogLevel) || (logDest == NULL)) {
    229263        return;
    230264    }
     
    270304
    271305    // Create the various log fields...
    272     if (p_psLogTime) {
     306    if (logTime) {
    273307        maxLength -= snprintf(head_ptr, maxLength, "%4d:%02d:%02d %02d:%02d:%02dZ",
    274308                              utc->tm_year + 1900, utc->tm_mon + 1, utc->tm_mday,
     
    277311    }
    278312    // Hostname should be 20 characters.
    279     if (p_psLogHost) {
     313    if (logHost) {
    280314        if (head_ptr > head) {
    281315            *head_ptr++ = '|';
     
    284318        head_ptr += strlen(head_ptr);
    285319    }
    286     if (p_psLogLevel) {
     320    if (logLevel) {
    287321        if (head_ptr > head) {
    288322            *head_ptr++ = '|';
     
    292326    }
    293327    // The name field must be 15 characters.
    294     if (p_psLogName) {
     328    if (logName) {
    295329        if (head_ptr > head) {
    296330            *head_ptr++ = '|';
     
    302336    if (head_ptr > head) {
    303337        *head_ptr++ = '|';
    304     } else if (!p_psLogMsg) { // no output desired
     338    } else if (!logMsg) { // no output desired
    305339        return;
    306340    }
    307341    *head_ptr = '\0';
    308342
    309     switch (p_psGlobalLogDest) {
    310     case PS_LOG_TO_STDOUT:
    311         puts(head);
    312         if (p_psLogMsg) {
    313             vprintf(fmt, ap);
    314             if (fmt[strlen(fmt) - 1] != '\n') {
    315                 putc('\n', stdout);
    316             }
    317         } else {
    318             putc('\n', stdout);
    319         }
    320         break;
    321 
    322     case PS_LOG_TO_STDERR:
    323         fputs(head, stderr);
    324         if (p_psLogMsg) {
    325             vfprintf(stderr, fmt, ap);
    326             if (fmt[strlen(fmt) - 1] != '\n') {
    327                 putc('\n', stderr);
    328             }
    329         } else {
    330             putc('\n', stderr);
    331         }
    332         break;
    333 
    334     default:
    335         fprintf(stderr, "psLogMsg: You cannot get here (%s:%d)\n",
    336                 __FILE__, __LINE__);
    337         abort();
     343    fputs(head, logDest);
     344    if (logMsg) {
     345        vfprintf(logDest, fmt, ap);
     346        if (fmt[strlen(fmt) - 1] != '\n') {
     347            fputc('\n', logDest);
     348        }
     349    } else {
     350        fputc('\n', logDest);
    338351    }
    339352}
  • trunk/psLib/src/sysUtils/psLogMsg.h

    r1138 r1153  
    1111 *  @author George Gusciora, MHPCC
    1212 *
    13  *  @version $Revision: 1.9 $ $Name: not supported by cvs2svn $
    14  *  @date $Date: 2004-06-30 01:17:20 $
     13 *  @version $Revision: 1.10 $ $Name: not supported by cvs2svn $
     14 *  @date $Date: 2004-06-30 20:22:37 $
    1515 *
    1616 *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     
    2929/// In future versions, this procedure will take a character string as an
    3030/// argument which can specify more general log destinations.
    31 int psLogSetDestination(int dest     ///< Specifies where to send messages.
     31int psLogSetDestination(const char* dest   ///< Specifies where to send messages.
    3232                       );
    3333
Note: See TracChangeset for help on using the changeset viewer.