2010-10-31 3 views
0

J'utilise le journal d'amplification dans mon application pour la consignation.Logging Guard pour limiter les messages de consignation semi-constants

Cependant, dans certaines sections de mon code, j'ai des instructions de log qui peuvent arriver très souvent si quelque chose ne va pas. Je voudrais une sorte de garde qui peut limiter les messages de journal quand il détecte que le même message de journal apparaît constamment.

par exemple. (Ceci est un exemple simplifié, non mise en œuvre effective)

while(!framebuffer.try_pop(frame)) 
{ 
    BOOST_LOG(trace) << "Buffer underrun."; 
} 

Si pour une raison quelconque « framebuffer » ne reçoit pas de cadres depuis longtemps l'enregistrement envoie des messages façon de beaucoup de journaux.

Cependant, je ne sais pas quelle stratégie utiliser pour limiter les messages du journal, sans perdre les messages importants, et comment l'implémenter.

Répondre

1

Que diriez-vous quelque chose de simple, vous pouvez encapsuler si vous voulez:

int tooMany = 10; 
int count = 0; 
while(!framebuffer.try_pop(frame)) 
{ 
    if(count < tooMany) { 
     BOOST_LOG(trace) << "Buffer underrun."; 
    } 
    count++; 
} 
if(count >= tooMany) { 
    BOOST_LOG(trace) << "Message repeated: " << count << " times."; 
} 

Faites juste attention des débordements d'entiers sur la variable « count » si vous obtenez une bucketload absolue d'incréments.

Questions connexes