2016-07-27 5 views
1

J'utilise la coutume boost::log pour formatter codage couleur du message de journal de sortie, mais je ne pas trouver la bonne façon d'ajouter TimeStamp et ThreadID attributs dans le journal. Lorsque j'utilise l'enregistrement de fichiers, j'écris simplement keywords::format = "[%TimeStamp%] [%ThreadID%] [%Severity%]: %Message%" comme paramètre logging::add_file_log. Je veux avoir un effet similaire dans le formatter personnalisé suivant:Comment générer les attributs TimeStamp et ThreadID avec le formateur boost :: log personnalisé?

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"; 
} 

Répondre

3

Étant donné que vous avez ajouté ces attributs pour les enregistrements du journal, il y a plusieurs façons de les extraire. Le plus simple est d'utiliser keywords. D'abord, vous déclarez des mots-clés pour les attributs:

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) 

Notez que le troisième paramètre est le type de valeur de l'attribut correspondant. Dans cet exemple, j'ai supposé que les attributs que vous avez utilisés étaient local_clock et current_thread_id.

Maintenant, vous pouvez utiliser ces mots-clés pour extraire la valeur des enregistrements de journal.

stream << record[a_timestamp] << " " 
     << record[a_thread_id] 
     << " [" << severity << "] " 
     << record[logging::expressions::smessage] 
     << "\e[0m";