Changeset 1153
- Timestamp:
- Jun 30, 2004, 10:22:37 AM (22 years ago)
- Location:
- trunk/psLib/src
- Files:
-
- 4 edited
-
sys/psLogMsg.c (modified) (14 diffs)
-
sys/psLogMsg.h (modified) (2 diffs)
-
sysUtils/psLogMsg.c (modified) (14 diffs)
-
sysUtils/psLogMsg.h (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psLib/src/sys/psLogMsg.c
r1143 r1153 11 11 * @author George Gusciora, MHPCC 12 12 * 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 $ 15 15 * 16 16 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 45 45 46 46 #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 47 static FILE* logDest = (FILE*)1; // flag to initialize to stderr before using. 48 static int globalLogLevel = PS_LOG_INFO; // log all messages at this or above 49 static bool logTime = true; // Flag to include time info 50 static bool logHost = true; // Flag to include host info 51 static bool logLevel = true; // Flag to include level info 52 static bool logName = true; // Flag to include name info 53 static bool logMsg = true; // Flag to include message info 54 58 55 /***************************************************************************** 59 56 psLogSetLevel(): Set the current log level and return old level. … … 68 65 { 69 66 // Save old global log level for changing it. 70 int oldLevel = p_psGlobalLogLevel;67 int oldLevel = globalLogLevel; 71 68 72 69 if ((level < MIN_LOG_LEVEL) || (level > MAX_LOG_LEVEL)) { … … 77 74 78 75 // Set new global log level 79 p_psGlobalLogLevel = level;76 globalLogLevel = level; 80 77 81 78 // Return old global log level … … 95 92 An integer specifying the old log destination. 96 93 *****************************************************************************/ 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 94 int 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 } 121 150 122 151 /***************************************************************************** … … 138 167 { 139 168 // 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; 145 174 146 175 // if fmt is NULL, no logging is desired. … … 160 189 case 'H': 161 190 case 'h': 162 p_psLogHost = true;191 logHost = true; 163 192 break; 164 193 case 'L': 165 194 case 'l': 166 p_psLogLevel = true;195 logLevel = true; 167 196 break; 168 197 case 'M': 169 198 case 'm': 170 p_psLogMsg = true;199 logMsg = true; 171 200 break; 172 201 case 'N': 173 202 case 'n': 174 p_psLogName = true;203 logName = true; 175 204 break; 176 205 case 'T': 177 206 case 't': 178 p_psLogTime = true;207 logTime = true; 179 208 break; 180 209 default: … … 184 213 } 185 214 186 if (! p_psLogMsg) {215 if (!logMsg) { 187 216 psTrace("utils.logMsg", 1, 188 217 "You must at least log error messages (You chose \"%s\")", … … 225 254 struct tm *utc = gmtime(&clock); // The current gm time. 226 255 256 // if logDest has not been initialized, do so before using it 257 if (logDest==(FILE*)1) { 258 logDest = stderr; 259 } 260 227 261 // 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)) { 229 263 return; 230 264 } … … 270 304 271 305 // Create the various log fields... 272 if ( p_psLogTime) {306 if (logTime) { 273 307 maxLength -= snprintf(head_ptr, maxLength, "%4d:%02d:%02d %02d:%02d:%02dZ", 274 308 utc->tm_year + 1900, utc->tm_mon + 1, utc->tm_mday, … … 277 311 } 278 312 // Hostname should be 20 characters. 279 if ( p_psLogHost) {313 if (logHost) { 280 314 if (head_ptr > head) { 281 315 *head_ptr++ = '|'; … … 284 318 head_ptr += strlen(head_ptr); 285 319 } 286 if ( p_psLogLevel) {320 if (logLevel) { 287 321 if (head_ptr > head) { 288 322 *head_ptr++ = '|'; … … 292 326 } 293 327 // The name field must be 15 characters. 294 if ( p_psLogName) {328 if (logName) { 295 329 if (head_ptr > head) { 296 330 *head_ptr++ = '|'; … … 302 336 if (head_ptr > head) { 303 337 *head_ptr++ = '|'; 304 } else if (! p_psLogMsg) { // no output desired338 } else if (!logMsg) { // no output desired 305 339 return; 306 340 } 307 341 *head_ptr = '\0'; 308 342 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); 338 351 } 339 352 } -
trunk/psLib/src/sys/psLogMsg.h
r1138 r1153 11 11 * @author George Gusciora, MHPCC 12 12 * 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 $ 15 15 * 16 16 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 29 29 /// In future versions, this procedure will take a character string as an 30 30 /// argument which can specify more general log destinations. 31 int psLogSetDestination( int dest///< Specifies where to send messages.31 int psLogSetDestination(const char* dest ///< Specifies where to send messages. 32 32 ); 33 33 -
trunk/psLib/src/sysUtils/psLogMsg.c
r1143 r1153 11 11 * @author George Gusciora, MHPCC 12 12 * 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 $ 15 15 * 16 16 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 45 45 46 46 #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 47 static FILE* logDest = (FILE*)1; // flag to initialize to stderr before using. 48 static int globalLogLevel = PS_LOG_INFO; // log all messages at this or above 49 static bool logTime = true; // Flag to include time info 50 static bool logHost = true; // Flag to include host info 51 static bool logLevel = true; // Flag to include level info 52 static bool logName = true; // Flag to include name info 53 static bool logMsg = true; // Flag to include message info 54 58 55 /***************************************************************************** 59 56 psLogSetLevel(): Set the current log level and return old level. … … 68 65 { 69 66 // Save old global log level for changing it. 70 int oldLevel = p_psGlobalLogLevel;67 int oldLevel = globalLogLevel; 71 68 72 69 if ((level < MIN_LOG_LEVEL) || (level > MAX_LOG_LEVEL)) { … … 77 74 78 75 // Set new global log level 79 p_psGlobalLogLevel = level;76 globalLogLevel = level; 80 77 81 78 // Return old global log level … … 95 92 An integer specifying the old log destination. 96 93 *****************************************************************************/ 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 94 int 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 } 121 150 122 151 /***************************************************************************** … … 138 167 { 139 168 // 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; 145 174 146 175 // if fmt is NULL, no logging is desired. … … 160 189 case 'H': 161 190 case 'h': 162 p_psLogHost = true;191 logHost = true; 163 192 break; 164 193 case 'L': 165 194 case 'l': 166 p_psLogLevel = true;195 logLevel = true; 167 196 break; 168 197 case 'M': 169 198 case 'm': 170 p_psLogMsg = true;199 logMsg = true; 171 200 break; 172 201 case 'N': 173 202 case 'n': 174 p_psLogName = true;203 logName = true; 175 204 break; 176 205 case 'T': 177 206 case 't': 178 p_psLogTime = true;207 logTime = true; 179 208 break; 180 209 default: … … 184 213 } 185 214 186 if (! p_psLogMsg) {215 if (!logMsg) { 187 216 psTrace("utils.logMsg", 1, 188 217 "You must at least log error messages (You chose \"%s\")", … … 225 254 struct tm *utc = gmtime(&clock); // The current gm time. 226 255 256 // if logDest has not been initialized, do so before using it 257 if (logDest==(FILE*)1) { 258 logDest = stderr; 259 } 260 227 261 // 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)) { 229 263 return; 230 264 } … … 270 304 271 305 // Create the various log fields... 272 if ( p_psLogTime) {306 if (logTime) { 273 307 maxLength -= snprintf(head_ptr, maxLength, "%4d:%02d:%02d %02d:%02d:%02dZ", 274 308 utc->tm_year + 1900, utc->tm_mon + 1, utc->tm_mday, … … 277 311 } 278 312 // Hostname should be 20 characters. 279 if ( p_psLogHost) {313 if (logHost) { 280 314 if (head_ptr > head) { 281 315 *head_ptr++ = '|'; … … 284 318 head_ptr += strlen(head_ptr); 285 319 } 286 if ( p_psLogLevel) {320 if (logLevel) { 287 321 if (head_ptr > head) { 288 322 *head_ptr++ = '|'; … … 292 326 } 293 327 // The name field must be 15 characters. 294 if ( p_psLogName) {328 if (logName) { 295 329 if (head_ptr > head) { 296 330 *head_ptr++ = '|'; … … 302 336 if (head_ptr > head) { 303 337 *head_ptr++ = '|'; 304 } else if (! p_psLogMsg) { // no output desired338 } else if (!logMsg) { // no output desired 305 339 return; 306 340 } 307 341 *head_ptr = '\0'; 308 342 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); 338 351 } 339 352 } -
trunk/psLib/src/sysUtils/psLogMsg.h
r1138 r1153 11 11 * @author George Gusciora, MHPCC 12 12 * 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 $ 15 15 * 16 16 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 29 29 /// In future versions, this procedure will take a character string as an 30 30 /// argument which can specify more general log destinations. 31 int psLogSetDestination( int dest///< Specifies where to send messages.31 int psLogSetDestination(const char* dest ///< Specifies where to send messages. 32 32 ); 33 33
Note:
See TracChangeset
for help on using the changeset viewer.
