Ce code est erroné
LOG4CPLUS_TRACE(logger,
LOG4CPLUS_TEXT("symbol=" << m_contract.symbol));
il faut lire
LOG4CPLUS_TRACE(logger,
LOG4CPLUS_TEXT("symbol=") << m_contract.symbol);
au lieu de cela.
En ce qui concerne les messages concaténés, quel format de sortie utilisez-vous ? S'il s'agit du schéma, vous devez ajouter l'élément %n
à la fin de la chaîne de formatage.
EDITAR:
Malheureusement, je suis toujours sont concaténés. Je pense que cela est lié au fait que que l'appel request.toString() dans le message de log lui-même a également un appel à un message de log, mais pour une raison quelconque, les deux messages sont les deux messages sont imprimés ensemble même après la correction du code :(
Ah, j'ai mal compris le problème, initialement. Vous enregistrez donc un deuxième événement pendant que vous préparez le premier. Le problème est que le formatage est effectué dans un fichier de type ostringstream
. Le système local de filtrage ostringstream
est utilisé pour améliorer les performances. (Le ostringstream
n'a pas besoin d'être construit et détruit à chaque message enregistré).
Pour une solution immédiate, deux options s'offrent à vous. Premièrement, vous pouvez arrêter cette journalisation imbriquée. Deuxièmement, vous "corrigez" LOG4CPLUS_*()
de ne pas utiliser les macros locales aux threads. ostringstream
ou vous créez vos propres macros d'enregistrement. L'un ou l'autre ne devrait pas être trop difficile.
À long terme, je peux ajouter un cas spécial aux macros d'enregistrement qui leur permettraient d'utiliser des données fraîches. ostringstream
à chaque fois pour permettre votre cas d'utilisation.
EDIT 2 :
J'ai rempli un rapport de bogue et joint un correctif qui met en œuvre une solution de contournement. Voir la page https://sourceforge.net/p/log4cplus/bugs/153/ .