63 #define LOG_VAR_FILENAME LOGNS_PUT(LogFileName) 64 #define LOG_VAR_FP LOGNS_PUT(LogFp)
79 static pthread_mutex_t MutexLog = PTHREAD_MUTEX_INITIALIZER;
221 else if( (fp = fopen(sLogFileName,
"a+")) ==
NULL )
321 pthread_mutex_lock(&MutexLog);
332 struct timespec tsNow;
334 clock_gettime(CLOCK_REALTIME, &tsNow);
335 fprintf(
LOG_VAR_FP,
"[%ld.%09ld] ", tsNow.tv_sec, tsNow.tv_nsec);
344 pthread_mutex_unlock(&MutexLog);
366 for(last=0, s=sFmt; s && *s; last = *s, s++)
445 void LOGGER_CALL(
const char *sPreface,
int nLevel,
const char *sFile,
int nLine,
446 const char *sFuncName, ...)
453 pthread_mutex_lock(&MutexLog);
464 struct timespec tsNow;
466 clock_gettime(CLOCK_REALTIME, &tsNow);
467 fprintf(
LOG_VAR_FP,
"[%ld.%09ld] ", tsNow.tv_sec, tsNow.tv_nsec);
470 va_start(ap, sFuncName);
476 sPreface, nLevel-1, sFile, nLine, sFuncName);
481 "%s" "Diag%d: %s[%d] " "%s(",
482 sPreface, nLevel-1, sFile, nLine, sFuncName);
488 sArgFmt = va_arg(ap,
char *);
489 if( sArgFmt ==
NULL )
502 fprintf(
LOG_VAR_FP, sArgFmt, va_arg(ap,
int));
505 fprintf(
LOG_VAR_FP, sArgFmt, va_arg(ap,
long));
508 fprintf(
LOG_VAR_FP, sArgFmt, va_arg(ap,
unsigned int));
511 fprintf(
LOG_VAR_FP, sArgFmt, va_arg(ap,
unsigned long));
514 fprintf(
LOG_VAR_FP, sArgFmt, va_arg(ap,
double));
517 fprintf(
LOG_VAR_FP, sArgFmt, va_arg(ap,
char *));
520 fprintf(
LOG_VAR_FP, sArgFmt, va_arg(ap,
void *));
523 fprintf(
LOG_VAR_FP, sArgFmt, va_arg(ap,
int));
537 pthread_mutex_unlock(&MutexLog);
#define LOG_WITH_TIMESTAMP()
Test if logging includes timestamps.
void LOG_SET_TIMESTAMP_ENABLE(bool_t enable)
Enable/disable log timestamps.
void LOG_SET_COLOR_ENABLE(bool_t enable)
Enable/disable logging in color.
#define LOGARGS_DIAG(level, fmt,...)
Standard diagnostic logging output arguments with compiled color.
#define LOG_LEVEL_OFF
turn off all non-error logging
FILE * LOG_GET_LOGFP()
Get current logging output stream file pointer.
#define LOG_COLOR_EN_DFT
default is to log in color
#define LOG_FP_DFT
default log out stream
#define LOG_VAR_FILENAME
define in namespace
char * new_strdup(const char *s)
Duplicate a string.
int LOG_GET_THRESHOLD()
Get current logging threshold level.
#define LOG_TIMESTAMP_EN_DFT
default is to include timestamps
#define LOG_COLOR_POST
color escape sequence postfix
int LOG_SET_THRESHOLD(int nLevel)
Set new logging threshold level.
#define LOGARGS_DIAG_PLAIN(level, fmt,...)
Standard diagnostic logging output arguments in plain text.
Memory allocation and deallocation declarations.
#define LOGDIAG1(fmt,...)
Standard Diagnostic Level 1 logging.
#define LOGSYSERROR(fmt,...)
Standard System Error logging.
void LOG_ATTACH_LOGFP(FILE *fp, const char *sFpFileName)
Attach opened file pointer as the new logging output stream.
int LOG_SET_LOGFILE(const char *sLogFileName)
Set new logging output file.
bool_t LOG_VAR_COLOR_EN
Log in color (false = disable, true = enable)
int LOG_VAR_THRESHOLD
Log threshold level (log iff level <= threshold)
#define LOG_FILENAME_STDOUT
'stdout' log filename
static bool_t LOG_VAR_TIMESTAMP_EN
Timestamp logging (false = disable, true = enable)
const char * LOG_GET_LOGFILE()
Get logging output stream file name.
#define LOGGING_NA
logging not available (not compiled)
#define LOG_LEVEL_DFT
default log level is off
RoadNarrows Robotics common configuration file.
#define LOG_VAR_FP
define in namespace
#define LOG_LEVEL_DIAG1
diagnostic level 1
static int LogVaFmtType(char *sFmt)
Parse function call argument format string to determine type.
#define LOG_FILENAME_DFT
default log filename
void LOGGER_CALL(const char *sPreface, int nLevel, const char *sFile, int nLine, const char *sFuncName,...)
Print function call diagnostics tracing to log output stream..
bool_t LogColorEnable
color logging is [not] enabled
#define LOG_FILENAME_STDERR
'stderr' log filename
#define LOG_COLOR_DIAG
diagnostics color
void LOGGER(const char *sFmt,...)
Print loggging diagnostics, debug, error, and system error messages to log output stream...