Files
src-1.2/external/3rd/library/soePlatform/ChatAPI/utils/Base/Logger.h
T

166 lines
3.5 KiB
C++
Executable File

#ifndef __LOGGER_H__
#define __LOGGER_H__
// make the compiler shut up
#pragma warning (disable : 4786)
#include "Platform.h"
#include <string>
#include <map>
#include "Mutex.h"
#ifndef WIN32
#include <syslog.h>
#endif
#ifdef EXTERNAL_DISTRO
namespace NAMESPACE
{
#endif
namespace Base
{
#define LOG_ALWAYS -1
#define LOG_FILEONLY -2
struct LogInfo
{
FILE *file;
unsigned used;
tm ts;
time_t last;
unsigned max;
int level;
std::string filename;
std::string name;
};
/* Use these flags defined in syslog.h for the priority level
LOG_EMERG,
LOG_ALERT,
LOG_CRIT,
LOG_ERR,
LOG_WARNING,
LOG_NOTICE,
LOG_INFO,
LOG_DEBUG
*/
//-----------------------------------------------
// Windows doesn't have syslog (?) so we define the
// syslog warning levels here to satisfy the compiler
// but then ignore them in log() and logSimple()
//-----------------------------------------------
// PLEASE USE THE FOLLOWING ENUMERATIONS FOR LOGGING INSTEAD OF THE SYSLOG ONES.
enum LogLevel
{
#ifndef WIN32
BASE_LOG_EMERG = LOG_EMERG,
BASE_LOG_ALERT = LOG_ALERT,
BASE_LOG_CRIT = LOG_CRIT,
BASE_LOG_ERR = LOG_ERR,
BASE_LOG_WARNING = LOG_WARNING,
BASE_LOG_NOTICE = LOG_NOTICE,
BASE_LOG_INFO = LOG_INFO,
BASE_LOG_DEBUG = LOG_DEBUG
#else
BASE_LOG_EMERG = 0,
BASE_LOG_ALERT,
BASE_LOG_CRIT,
BASE_LOG_ERR,
BASE_LOG_WARNING,
BASE_LOG_NOTICE,
BASE_LOG_INFO,
BASE_LOG_DEBUG
#endif
};
// The _WIN32_LOG_LEVELS_ remain for backwards compatability.
#ifdef WIN32
enum _WIN32_LOG_LEVELS_
{
LOG_EMERG = 0,
LOG_ALERT,
LOG_CRIT,
LOG_ERR,
LOG_WARNING,
LOG_NOTICE,
LOG_INFO,
LOG_DEBUG
};
#endif
enum ELogType
{
eUseNone = 0,
eUseLocalFile = 1,
eUseSysLog = 2,
eUseBoth = 3
};
class Logger
{
public:
Logger(const char *programName,
const ELogType logType = eUseLocalFile,
const char *prefix = "logs",
int level = 10,
unsigned size = 0,
bool rollDate = true);
Logger(const char *prefix,
int level,
unsigned size,
bool rollDate = true); // Backwards compatibility
void LoggerInit(const char *programName);
~Logger();
void addLog(const char *id, unsigned logenum, int level, unsigned size);
void addLog(const char *id, unsigned logenum);
void removeLog(unsigned logenum);
void updateLog(unsigned logenum, int level, unsigned size);
void logSimple(unsigned logenum, int level, const char *message);
void logSimpleWithSys(unsigned logenum, unsigned priority, int level, const char *message);
void logWithSys(unsigned logenum, unsigned priority, int level, const char *message, ...);
void log(unsigned logenum, int level, const char *message, ...);
void flushAll();
void flush(unsigned logenum);
unsigned long getLogRolloverSize() { return m_logRolloverSize; }
void setLogRolloverSize(unsigned long maxLogSize) { m_logRolloverSize = maxLogSize; }
ELogType getLoggingType(unsigned logLevel) const;
void setLoggingType(unsigned logLevel, ELogType logType);
private:
void rollDate(time_t now);
void cmkdir(const char *dir, int mode);
void rollLog(LogInfo *logInfo);
void checkLogRoll(LogInfo *logInfo, unsigned long lenToAdd);
unsigned m_defaultLevel;
unsigned m_defaultSize;
std::string m_lastDateText;
tm m_lastDateTime;
std::map<unsigned, LogInfo *> m_logTable;
std::string m_logPrefix;
std::string m_dirPrefix;
#if defined (_REENTRANT) || defined (_MT)
Base::CMutex rLock;
#endif
bool m_rollDate;
unsigned long m_logRolloverSize;
std::map<unsigned, ELogType> m_logLevelToTypeMap;
ELogType m_combinedLogType;
bool m_opennedSyslog;
};
extern const char file_sep;
};
#ifdef EXTERNAL_DISTRO
};
#endif
#endif