/******************************************************** ** Copyright 1999 Earth Resource Mapping Ltd. ** This document contains proprietary source code of ** Earth Resource Mapping Ltd, and can only be used under ** one of the three licenses as described in the ** license.txt file supplied with this distribution. ** See separate license.txt file for license details ** and conditions. ** ** This software is covered by US patent #6,442,298, ** #6,102,897 and #6,633,688. Rights to use these patents ** is included in the license agreements. ** ** FILE: NCSLog.h ** CREATED: Mon May 31 09:19:00 WST 1999 ** AUTHOR: Doug Mansell ** PURPOSE: NCS server logging interface ** EDITS: ** [01] 06-06-02 Changed the Registry key names to match IWS 1.7 *******************************************************/ #ifndef NCSLOG_H #define NCSLOG_H #ifndef NCSTYPES_H #include "NCSTypes.h" #endif // NCSTYPES_H #ifdef __cplusplus extern "C" { #endif #define NCS_SERVER_LOG_FILE_NAME_PREF "Log Filename" //[01] #define NCS_SERVER_LOG_FILE_LEVEL_PREF "Log Level" //[01] #define NCS_LOG_FILE_NAME_PREF "IWS Log Filename" #define NCS_LOG_FILE_LEVEL_PREF "IWS Log Level" typedef enum { LOG_LOW = 0, // lowest log level LOG_MED, // more informational LOG_HIGH, // and more LOG_HIGHER // ... with room for even more } ENCSLogLevel; void NCSLogGetConfig(char **pLogName, ENCSLogLevel *pLogLevel); void NCSLog(ENCSLogLevel eLevel, char *szFormat, ...); void NCSLogSetServer(BOOLEAN bValue); void NCSLogInit(); void NCSLogFini(); #ifdef __cplusplus #ifndef NCSOBJECT_H #include "NCSObject.h" #endif // NCSOBJECT_H #ifndef NCSMUTEX_H #include "NCSMutex.h" #endif // NCSMUTEX_H #ifndef NCSTHREAD_H #include "NCSThread.h" #endif // NCSTHREAD_H /** * Logging utility class for server. * * @author Simon Cope * @version $Revision$ $Author$ $Date$ */ class NCS_EXPORT CNCSLog: public CNCSObject { public: /** * Enum of the different log levels available. LOG_DEBUG only appears in the log file for a DEBUG build. */ typedef enum { LOG_LEVEL0 = LOG_LOW, // Always logged LOG_LEVEL1 = LOG_MED, // Level 1 messages LOG_LEVEL2 = LOG_HIGH, // Level 2 messages LOG_LEVEL3 = LOG_HIGHER, // Level 3 messages LOG_DEBUG // DEBUG build only } NCSLogLevel; /** * Default Constructor. */ CNCSLog(); virtual ~CNCSLog(); /** * Log a string to the log file. String is also written out using OutputDebugString() * (on WIN32) or fprintf(stderr) (other platforms) under a DEBUG build * * @param pBuf String to log to the log file */ static void Log(char *pBuf); /** * Log a formatted error if the loggin level meets the specified one. * * @param eLevel Log level that must be met before message should be logged. * @param pFormat printf() style format string to log * @param ... Argument list to match pFormat format string */ static void Log(NCSLogLevel eLevel, char *pFormat, ...); /** * Lof a formatted error and file/line entry to the log file if the logging level meets the specified one. * * @param pFile File name where Log() is called (usually __FILE__ is used) * @param nLine Line number in file where Log() is called (usually __LINE__ is used) * @param eLevel Log level that must be met before message should be logged. * @param pFormat printf() style format string to log * @param ... Argument list to match pFormat format string */ static void Log(char *pFile, int nLine, NCSLogLevel eLevel, char *pFormat, ...); /** * Get the current log level. * * @return NCSLogLevel Current log level as set in the registry */ static NCSLogLevel GetLogLevel(void); /** * Update the current log level and log file name from the registry (WIN32). * */ static void UpdateLogConfig(void); private: /** * Mutex for accessing the log level and log file name, which can change at runtime. * * @see #sm_eLogLevel * @see #sm_szLogFile */ static CNCSMutex sm_Mutex; /** * Current log level. */ static NCSLogLevel sm_eLogLevel; /** * Current log file name. */ static char sm_szLogFile[MAX_PATH]; //static int sm_nRefCount; public: class NCS_EXPORT CNCSUpdateLogConfigThread: public CNCSThread { public: CNCSUpdateLogConfigThread() { //Spawn(this, false); } virtual ~CNCSUpdateLogConfigThread() { Stop(); } void Work( void *pData ); }; static CNCSUpdateLogConfigThread *pUpdateLogConfigThread; /** * CNCSThread Work() function, used to update config from registry. * * @param pParameter (UNUSED) */ //void Work(void *pParameter); }; #define LOGERROR0( t, e ) CNCSLog::Log(__FILE__, __LINE__, CNCSLog::LOG_LEVEL0, "Error: %s %s(%ld)", t, NCSGetErrorText(e), e) #define LOGERROR1( t, e ) CNCSLog::Log(__FILE__, __LINE__, CNCSLog::LOG_LEVEL1, "Error: %s %s(%ld)", t, NCSGetErrorText(e), e) } #endif #endif