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 "OW_config.h"
00036 #include "OW_AppenderLogger.hpp"
00037 #include "OW_LogMessage.hpp"
00038 #include "OW_LogAppender.hpp"
00039
00040 #ifdef OW_WIN32
00041 #include <algorithm>
00042 #endif
00043
00044 namespace OW_NAMESPACE
00045 {
00046
00048 AppenderLogger::AppenderLogger(const String& defaultComponent, ELogLevel level, const LogAppenderRef& appender)
00049 : Logger(defaultComponent, level)
00050 , m_appenders(1, appender)
00051 {
00052 }
00053
00055 AppenderLogger::AppenderLogger(const String& defaultComponent, const Array<LogAppenderRef>& appenders)
00056 : Logger(defaultComponent, getLevel(appenders))
00057 , m_appenders(appenders)
00058 {
00059 }
00060
00062 AppenderLogger::~AppenderLogger()
00063 {
00064 }
00065
00067 void
00068 AppenderLogger::addLogAppender(const LogAppenderRef& appender)
00069 {
00070 m_appenders.append(appender);
00071 }
00072
00074 void
00075 AppenderLogger::doProcessLogMessage(const LogMessage& message) const
00076 {
00077 for (size_t i = 0; i < m_appenders.size(); ++i)
00078 {
00079 m_appenders[i]->logMessage(message);
00080 }
00081 }
00082
00084 bool
00085 AppenderLogger::doComponentAndCategoryAreEnabled(const String& component, const String& category) const
00086 {
00087 for (size_t i = 0; i < m_appenders.size(); ++i)
00088 {
00089 if (m_appenders[i]->componentAndCategoryAreEnabled(component, category))
00090 {
00091 return true;
00092 }
00093 }
00094 return false;
00095 }
00096
00098 bool
00099 AppenderLogger::doCategoryIsEnabled(const String& category) const
00100 {
00101 for (size_t i = 0; i < m_appenders.size(); ++i)
00102 {
00103 if (m_appenders[i]->categoryIsEnabled(category))
00104 {
00105 return true;
00106 }
00107 }
00108 return false;
00109 }
00110
00112 LoggerRef
00113 AppenderLogger::doClone() const
00114 {
00115 return LoggerRef(new AppenderLogger(*this));
00116 }
00117
00119 #ifdef OW_WIN32
00120 using namespace std;
00121 #endif
00122
00123 ELogLevel
00124 AppenderLogger::getLevel(const Array<LogAppenderRef>& appenders)
00125 {
00126 ELogLevel rv = E_FATAL_ERROR_LEVEL;
00127 for (size_t i = 0; i < appenders.size(); ++i)
00128 {
00129 #ifdef OW_WIN32
00130
00131 rv = max(rv, appenders[i]->getLogLevel());
00132 #else
00133 rv = std::max(rv, appenders[i]->getLogLevel());
00134 #endif
00135 }
00136 return rv;
00137 }
00138
00139 }
00140
00141
00142
00143
00144
00145