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