Я использую кастом повышение :: журнал средство форматирования для цветовой кодировки выходного сообщения журнала, но я не могу найти правильный способ добавить TimeStamp а также ThreadID атрибуты для журнала. Когда я использую ведение журнала файлов, я просто пишу keywords::format = "[%TimeStamp%] [%ThreadID%] [%Severity%]: %Message%"
как logging::add_file_log
параметр. Я хочу иметь подобный эффект в следующем пользовательском форматере:
void coloring_formatter(const logging::record_view& record,
logging::formatting_ostream& stream)
{
auto severity = record[logging::trivial::severity];
assert(severity);
stream << "\e[1m";
switch (severity.get())
{
case logging::trivial::severity_level::trace:
stream << "\e[97m";
break;
case logging::trivial::severity_level::debug:
stream << "\e[34m";
break;
case logging::trivial::severity_level::info:
stream << "\e[32m";
break;
case logging::trivial::severity_level::warning:
stream << "\e[93m";
break;
case logging::trivial::severity_level::error:
stream << "\e[91m";
break;
case logging::trivial::severity_level::fatal:
stream << "\e[41m";
break;
}
stream // << output TimeStamp
// << output ThreadID
<< "[" << severity << "] "<< record[logging::expressions::smessage]
<< "\e[0m";
}
Учитывая, что вы добавили эти атрибуты в записи журнала, существует несколько способов их извлечения. Самый простой способ — это использовать ключевые слова. Сначала вы объявляете ключевые слова для атрибутов:
BOOST_LOG_ATTRIBUTE_KEYWORD(a_timestamp, "TimeStamp", attrs::local_clock::value_type)
BOOST_LOG_ATTRIBUTE_KEYWORD(a_thread_id, "ThreadID", attrs::current_thread_id::value_type)
Обратите внимание, что третий параметр является типом значения соответствующего атрибута. В этом примере я предположил, что использованные вами атрибуты local_clock
а также current_thread_id
.
Теперь вы можете использовать эти ключевые слова для извлечения значения из записей журнала.
stream << record[a_timestamp] << " "<< record[a_thread_id]
<< " [" << severity << "] "<< record[logging::expressions::smessage]
<< "\e[0m";
Других решений пока нет …