| 2106 | } |
| 2107 | |
| 2108 | void DefaultLogDispatchCallback::dispatch(base::type::string_t&& logLine) { |
| 2109 | if (m_data->dispatchAction() == base::DispatchAction::NormalLog) { |
| 2110 | if (m_data->logMessage()->logger()->m_typedConfigurations->toFile(m_data->logMessage()->level())) { |
| 2111 | base::type::fstream_t* fs = m_data->logMessage()->logger()->m_typedConfigurations->fileStream( |
| 2112 | m_data->logMessage()->level()); |
| 2113 | if (fs != nullptr) { |
| 2114 | fs->write(logLine.c_str(), logLine.size()); |
| 2115 | if (fs->fail()) { |
| 2116 | ELPP_INTERNAL_ERROR("Unable to write log to file [" |
| 2117 | << m_data->logMessage()->logger()->m_typedConfigurations->filename(m_data->logMessage()->level()) << "].\n" |
| 2118 | << "Few possible reasons (could be something else):\n" << " * Permission denied\n" |
| 2119 | << " * Disk full\n" << " * Disk is not writable", true); |
| 2120 | } else { |
| 2121 | if (ELPP->hasFlag(LoggingFlag::ImmediateFlush) |
| 2122 | || (m_data->logMessage()->logger()->isFlushNeeded(m_data->logMessage()->level()))) { |
| 2123 | m_data->logMessage()->logger()->flush(m_data->logMessage()->level(), fs); |
| 2124 | } |
| 2125 | } |
| 2126 | } else { |
| 2127 | ELPP_INTERNAL_ERROR("Log file for [" << LevelHelper::convertToString(m_data->logMessage()->level()) << "] " |
| 2128 | << "has not been configured but [TO_FILE] is configured to TRUE. [Logger ID: " |
| 2129 | << m_data->logMessage()->logger()->id() << "]", false); |
| 2130 | } |
| 2131 | } |
| 2132 | if (m_data->logMessage()->logger()->m_typedConfigurations->toStandardOutput(m_data->logMessage()->level())) { |
| 2133 | if (ELPP->hasFlag(LoggingFlag::ColoredTerminalOutput)) |
| 2134 | m_data->logMessage()->logger()->logBuilder()->convertToColoredOutput(&logLine, m_data->logMessage()->level()); |
| 2135 | ELPP_COUT << ELPP_COUT_LINE(logLine); |
| 2136 | } |
| 2137 | } |
| 2138 | #if defined(ELPP_SYSLOG) |
| 2139 | else if (m_data->dispatchAction() == base::DispatchAction::SysLog) { |
| 2140 | // Determine syslog priority |
| 2141 | int sysLogPriority = 0; |
| 2142 | if (m_data->logMessage()->level() == Level::Fatal) |
| 2143 | sysLogPriority = LOG_EMERG; |
| 2144 | else if (m_data->logMessage()->level() == Level::Error) |
| 2145 | sysLogPriority = LOG_ERR; |
| 2146 | else if (m_data->logMessage()->level() == Level::Warning) |
| 2147 | sysLogPriority = LOG_WARNING; |
| 2148 | else if (m_data->logMessage()->level() == Level::Info) |
| 2149 | sysLogPriority = LOG_INFO; |
| 2150 | else if (m_data->logMessage()->level() == Level::Debug) |
| 2151 | sysLogPriority = LOG_DEBUG; |
| 2152 | else |
| 2153 | sysLogPriority = LOG_NOTICE; |
| 2154 | # if defined(ELPP_UNICODE) |
| 2155 | char* line = base::utils::Str::wcharPtrToCharPtr(logLine.c_str()); |
| 2156 | syslog(sysLogPriority, "%s", line); |
| 2157 | free(line); |
| 2158 | # else |
| 2159 | syslog(sysLogPriority, "%s", logLine.c_str()); |
| 2160 | # endif |
| 2161 | } |
| 2162 | #endif // defined(ELPP_SYSLOG) |
| 2163 | } |
| 2164 | |
| 2165 | #if ELPP_ASYNC_LOGGING |
no test coverage detected