| 2216 | } |
| 2217 | |
| 2218 | void DefaultLogDispatchCallback::dispatch(base::type::string_t&& logLine) { |
| 2219 | if (m_data->dispatchAction() == base::DispatchAction::NormalLog) { |
| 2220 | if (m_data->logMessage()->logger()->m_typedConfigurations->toFile(m_data->logMessage()->level())) { |
| 2221 | base::type::fstream_t* fs = m_data->logMessage()->logger()->m_typedConfigurations->fileStream( |
| 2222 | m_data->logMessage()->level()); |
| 2223 | if (fs != nullptr) { |
| 2224 | fs->write(logLine.c_str(), logLine.size()); |
| 2225 | if (fs->fail()) { |
| 2226 | ELPP_INTERNAL_ERROR("Unable to write log to file [" |
| 2227 | << m_data->logMessage()->logger()->m_typedConfigurations->filename(m_data->logMessage()->level()) << "].\n" |
| 2228 | << "Few possible reasons (could be something else):\n" << " * Permission denied\n" |
| 2229 | << " * Disk full\n" << " * Disk is not writable", true); |
| 2230 | } else { |
| 2231 | if (ELPP->hasFlag(LoggingFlag::ImmediateFlush) |
| 2232 | || (m_data->logMessage()->logger()->isFlushNeeded(m_data->logMessage()->level()))) { |
| 2233 | m_data->logMessage()->logger()->flush(m_data->logMessage()->level(), fs); |
| 2234 | } |
| 2235 | } |
| 2236 | } else { |
| 2237 | ELPP_INTERNAL_ERROR("Log file for [" << LevelHelper::convertToString(m_data->logMessage()->level()) << "] " |
| 2238 | << "has not been configured but [TO_FILE] is configured to TRUE. [Logger ID: " |
| 2239 | << m_data->logMessage()->logger()->id() << "]", false); |
| 2240 | } |
| 2241 | } |
| 2242 | if (m_data->logMessage()->logger()->m_typedConfigurations->toStandardOutput(m_data->logMessage()->level())) { |
| 2243 | if (ELPP->hasFlag(LoggingFlag::ColoredTerminalOutput)) |
| 2244 | m_data->logMessage()->logger()->logBuilder()->convertToColoredOutput(&logLine, m_data->logMessage()->level()); |
| 2245 | ELPP_COUT << ELPP_COUT_LINE(logLine); |
| 2246 | } |
| 2247 | } |
| 2248 | #if defined(ELPP_SYSLOG) |
| 2249 | else if (m_data->dispatchAction() == base::DispatchAction::SysLog) { |
| 2250 | // Determine syslog priority |
| 2251 | int sysLogPriority = 0; |
| 2252 | if (m_data->logMessage()->level() == Level::Fatal) |
| 2253 | sysLogPriority = LOG_EMERG; |
| 2254 | else if (m_data->logMessage()->level() == Level::Error) |
| 2255 | sysLogPriority = LOG_ERR; |
| 2256 | else if (m_data->logMessage()->level() == Level::Warning) |
| 2257 | sysLogPriority = LOG_WARNING; |
| 2258 | else if (m_data->logMessage()->level() == Level::Info) |
| 2259 | sysLogPriority = LOG_INFO; |
| 2260 | else if (m_data->logMessage()->level() == Level::Debug) |
| 2261 | sysLogPriority = LOG_DEBUG; |
| 2262 | else |
| 2263 | sysLogPriority = LOG_NOTICE; |
| 2264 | # if defined(ELPP_UNICODE) |
| 2265 | char* line = base::utils::Str::wcharPtrToCharPtr(logLine.c_str()); |
| 2266 | syslog(sysLogPriority, "%s", line); |
| 2267 | free(line); |
| 2268 | # else |
| 2269 | syslog(sysLogPriority, "%s", logLine.c_str()); |
| 2270 | # endif |
| 2271 | } |
| 2272 | #endif // defined(ELPP_SYSLOG) |
| 2273 | } |
| 2274 | |
| 2275 | #if ELPP_ASYNC_LOGGING |
no test coverage detected