blob: 1546fcc7e4183591c0bbc79a552f5439ae8ace08 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2006 - 2011 ACIN
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0.
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Rene Smodic, Alois Zoitl, Ingo Hegny
* - initial API and implementation and/or initial documentation
*******************************************************************************/
#include "devlog.h"
#ifndef NOLOG
# include <forte_config.h>
# include "timerha.h"
# include "forte_printer.h"
# include "../core/utils/criticalregion.h"
# include "forte_architecture_time.h"
# include <cstdio>
# include <cstdlib>
# include <cstdarg>
# if __cplusplus < 201103L // < stdc11
# ifndef VXWORKS //inttypes.h is not present for VXWORKS_KERNEL compilation type. PRIuFAST64 is defined in forte_config
# ifndef __STDC_FORMAT_MACROS
# define __STDC_FORMAT_MACROS
# endif //__STDC_FORMAT_MACROS
# include <inttypes.h>
# endif //VXWORKS
# else //< stdc11
# include <cinttypes>
# endif //< stdc11
static const char* scLogLevel[] = { "INFO", "WARNING", "ERROR", "DEBUG", "TRACE" };
//this define allows to provide an own log handler (see LMS for an example of this)
# ifndef FORTE_EXTERNAL_LOG_HANDLER
/*! \brief print the given log message with the error level and a time stamp
*
* @param pa_ecLevel the message's log level
* @param pa_acMessage the message to log
*/
void printLogMessage(E_MsgLevel paLevel, const char *paMessage);
static const int scMsgBufSize = FORTE_LOGGER_BUFFER_SIZE;
static char sMsgBuf[scMsgBufSize]; //!<Buffer for the messages created by the variable addMsg function
static CSyncObject sMessageLock;
void logMessage(E_MsgLevel paLevel, const char *paMessage, ...) {
CCriticalRegion crticalRegion(sMessageLock);
va_list pstArgPtr;
va_start(pstArgPtr, paMessage);
forte_vsnprintf(sMsgBuf, scMsgBufSize, paMessage, pstArgPtr);
va_end(pstArgPtr);
printLogMessage(paLevel, sMsgBuf);
}
void printLogMessage(E_MsgLevel paLevel, const char *paMessage) {
fprintf(stderr, "%s: T#%" PRIuFAST64 ": %s", scLogLevel[paLevel], getNanoSecondsMonotonic(), paMessage);
}
# endif /* FORTE_EXTERNAL_LOG_HANDLER */
#endif /* NOLOG */