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::doProcessLogMessage(
00076 const LogMessage& message) const
00077 {
00078 for (size_t i = 0; i < m_appenders.size(); ++i)
00079 {
00080 m_appenders[i]->logMessage(message);
00081 }
00082 }
00083
00085 bool
00086 AppenderLogger::doComponentAndCategoryAreEnabled(
00087 const String& component,
00088 const String& category) const
00089 {
00090 for (size_t i = 0; i < m_appenders.size(); ++i)
00091 {
00092 if (m_appenders[i]->componentAndCategoryAreEnabled(component, category))
00093 {
00094 return true;
00095 }
00096 }
00097 return false;
00098 }
00099
00101 bool
00102 AppenderLogger::doCategoryIsEnabled(
00103 const String& category) const
00104 {
00105 for (size_t i = 0; i < m_appenders.size(); ++i)
00106 {
00107 if (m_appenders[i]->categoryIsEnabled(category))
00108 {
00109 return true;
00110 }
00111 }
00112 return false;
00113 }
00114
00116 LoggerRef
00117 AppenderLogger::doClone() const
00118 {
00119 return LoggerRef(new AppenderLogger(*this));
00120 }
00121
00123 #ifdef BLOCXX_WIN32
00124 using namespace std;
00125 #endif
00126
00127 ELogLevel
00128 AppenderLogger::getLevel(
00129 const Array<LogAppenderRef>& appenders)
00130 {
00131 ELogLevel rv = E_FATAL_ERROR_LEVEL;
00132 for (size_t i = 0; i < appenders.size(); ++i)
00133 {
00134 #ifdef BLOCXX_WIN32
00135
00136 rv = max(rv, appenders[i]->getLogLevel());
00137 #else
00138 rv = std::max(rv, appenders[i]->getLogLevel());
00139 #endif
00140 }
00141 return rv;
00142 }
00143
00144 }
00145
00146
00147
00148
00149
00150