00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 
00024 
00025 
00026 
00027 
00028 
00029 
00030 
00035 #include "OWBI1_config.h"
00036 #include "OWBI1_Logger.hpp"
00037 #include "OW_ExceptionIds.hpp"
00038 #include "OWBI1_LogMessage.hpp"
00039 #include "OW_Assertion.hpp"
00040 #include "OWBI1_Array.hpp"
00041 #include "OW_Format.hpp"
00042 
00043 namespace OWBI1
00044 {
00045 
00046 OWBI1_DEFINE_EXCEPTION_WITH_ID(Logger);
00047 
00048 const String Logger::STR_NONE_CATEGORY("NONE");
00049 const String Logger::STR_FATAL_CATEGORY("FATAL");
00050 const String Logger::STR_ERROR_CATEGORY("ERROR");
00051 const String Logger::STR_INFO_CATEGORY("INFO");
00052 const String Logger::STR_DEBUG_CATEGORY("DEBUG");
00053 const String Logger::STR_ALL_CATEGORY("ALL");
00054 const String Logger::STR_DEFAULT_COMPONENT("none");
00055 
00057 Logger::~Logger()
00058 {
00059 }
00060 
00062 Logger::Logger(const String& defaultComponent, const ELogLevel l)
00063    : m_logLevel(l)
00064    , m_defaultComponent(defaultComponent)
00065 {
00066    OW_ASSERT(m_defaultComponent != "");
00067 }
00068 
00070 void
00071 Logger::processLogMessage(const LogMessage& message) const
00072 {
00073    OW_ASSERT(!message.component.empty());
00074    OW_ASSERT(!message.category.empty());
00075    OW_ASSERT(!message.message.empty());
00076 
00077    doProcessLogMessage(message);
00078 }
00079 
00081 void
00082 Logger::setLogLevel(const String& l)
00083 {
00084    if (l.equalsIgnoreCase(STR_INFO_CATEGORY))
00085    {
00086       setLogLevel(E_INFO_LEVEL);
00087    }
00088    else if (l.equalsIgnoreCase(STR_DEBUG_CATEGORY))
00089    {
00090       setLogLevel(E_DEBUG_LEVEL);
00091    }
00092    else if (l.equalsIgnoreCase(STR_ERROR_CATEGORY))
00093    {
00094       setLogLevel(E_ERROR_LEVEL);
00095    }
00096    else if (l.equalsIgnoreCase(STR_ALL_CATEGORY))
00097    {
00098       setLogLevel(E_ALL_LEVEL);
00099    }
00100    else if (l.equalsIgnoreCase(STR_NONE_CATEGORY))
00101    {
00102       setLogLevel(E_NONE_LEVEL);
00103    }
00104    else
00105    {
00106       setLogLevel(E_FATAL_ERROR_LEVEL);
00107    }
00108 }
00109 
00111 void
00112 Logger::logFatalError(const String& message, const char* filename, int fileline, const char* methodname) const
00113 {
00114    if (m_logLevel >= E_FATAL_ERROR_LEVEL)
00115    {
00116       processLogMessage( LogMessage(m_defaultComponent, STR_FATAL_CATEGORY, message, filename, fileline, methodname) );
00117    }
00118 }
00119 
00121 void
00122 Logger::logError(const String& message, const char* filename, int fileline, const char* methodname) const
00123 {
00124    if (m_logLevel >= E_ERROR_LEVEL)
00125    {
00126       processLogMessage( LogMessage(m_defaultComponent, STR_ERROR_CATEGORY, message, filename, fileline, methodname) );
00127    }
00128 }
00129 
00131 void
00132 Logger::logInfo(const String& message, const char* filename, int fileline, const char* methodname) const
00133 {
00134    if (m_logLevel >= E_INFO_LEVEL)
00135    {
00136       processLogMessage( LogMessage(m_defaultComponent, STR_INFO_CATEGORY, message, filename, fileline, methodname) );
00137    }
00138 }
00139 
00141 void
00142 Logger::logDebug(const String& message, const char* filename, int fileline, const char* methodname) const
00143 {
00144    if (m_logLevel >= E_DEBUG_LEVEL)
00145    {
00146       processLogMessage( LogMessage(m_defaultComponent, STR_DEBUG_CATEGORY, message, filename, fileline, methodname) );
00147    }
00148 }
00149    
00151 void
00152 Logger::logMessage(const String& component, const String& category, const String& message) const
00153 {
00154    processLogMessage(LogMessage(component, category, message, 0, -1, 0));
00155 }
00156 
00158 void
00159 Logger::logMessage(const String& component, const String& category, const String& message, const char* filename, int fileline, const char* methodname) const
00160 {
00161    processLogMessage(LogMessage(component, category, message, filename, fileline, methodname));
00162 }
00163 
00165 void
00166 Logger::logMessage(const String& category, const String& message) const
00167 {
00168    processLogMessage(LogMessage(m_defaultComponent, category, message, 0, -1, 0));
00169 }
00170 
00172 void
00173 Logger::logMessage(const String& category, const String& message, const char* filename, int fileline, const char* methodname) const
00174 {
00175    processLogMessage(LogMessage(m_defaultComponent, category, message, filename, fileline, methodname));
00176 }
00177 
00179 void
00180 Logger::logMessage(const LogMessage& message) const
00181 {
00182    processLogMessage(message);
00183 }
00184 
00186 bool
00187 Logger::categoryIsEnabled(const String& category) const
00188 {
00189    return doCategoryIsEnabled(category);
00190 }
00191 
00193 bool
00194 Logger::componentAndCategoryAreEnabled(const String& component, const String& category) const
00195 {
00196    return doComponentAndCategoryAreEnabled(component, category);
00197 }
00198 
00200 bool
00201 Logger::doComponentAndCategoryAreEnabled(const String& component, const String& category) const
00202 {
00203    return true;
00204 }
00205 
00207 bool
00208 Logger::doCategoryIsEnabled(const String& category) const
00209 {
00210    return true;
00211 }
00212 
00214 void
00215 Logger::setDefaultComponent(const String& component)
00216 {
00217    OW_ASSERT(component != "");
00218    m_defaultComponent = component;
00219 }
00220 
00222 String
00223 Logger::getDefaultComponent() const
00224 {
00225    return m_defaultComponent;
00226 }
00227    
00229 void
00230 Logger::setLogLevel(ELogLevel logLevel)
00231 {
00232    m_logLevel = logLevel;
00233 }
00234 
00236 LoggerRef
00237 Logger::clone() const
00238 {
00239    return doClone();
00240 }
00241 
00243 Logger::Logger(const Logger& x)
00244    : IntrusiveCountableBase(x)
00245    , m_logLevel(x.m_logLevel)
00246    , m_defaultComponent(x.m_defaultComponent)
00247 
00248 {
00249 }
00250 
00252 Logger&
00253 Logger::operator=(const Logger& x)
00254 {
00255    m_logLevel = x.m_logLevel;
00256    m_defaultComponent = x.m_defaultComponent;
00257    return *this;
00258 }
00259 
00261 void
00262 Logger::swap(Logger& x)
00263 {
00264    std::swap(m_logLevel, x.m_logLevel);
00265    m_defaultComponent.swap(x.m_defaultComponent);
00266 }
00267 
00268 
00269 } 
00270