Lors de la vérification de la Javadoc pour modèleLayout, j'ai remarqué qu'il recommande d'utiliser AméliorerPatternlayout à la place. Cependant, il semble faire à peu près la même chose. P>
Quelles sont les principales différences, en particulier celles que je dois savoir? P>
Je me demande également pourquoi ils ont fait une classe distincte plutôt que d'améliorer la classe d'origine. Toute différence de syntaxe? P>
4 Réponses :
vérifier le Documentation , tout est expliqué. modèleLayout contient des problèmes qui sont pas présent dans EnhancedPatternlayout surtout avec la synchronisation. P> EnhancoDeDPatternlayout CODE> est une version améliorée de modèleLayout code>. Il devrait être utilisé de préférence à motiflayout code> (à l'exception de la raison de la compatibilité avec motifLayout code>). P>
J'ai posé cette question exactement parce que j'avais déjà vérifié la documentation et rien n'est expliqué. Oui, il est amélioré, je peux voir cela de son nom aussi, mais amélioré Comment B>?
Donc, cela signifie que AméliorerPatternlayout n'a que des changements internes, mais il est utilisé exactement b> de la même manière?
Presque, il y a des caractères de conversion supplémentaires dans améliorépatternlayout code> qui ne sont pas disponibles dans motifLayout. Sinon, il semble être le même. Je ne suis pas un expert Java, vous pouvez donc vérifier vous-même en comparant les deux pages de documentation et / ou des sources.
EnhancedPatternlayout forme le résultat en tant que Stringbuffer, tandis que le modèleLayout achève le résultat en tant que chaîne. P>
La principale différence entre modèleLayout et EnhancedPatternlayout est dans la méthode Format (). MotifLayout repose sur un champ de membre nommé SBUF code> qu'il modifie alors que AméliorerPatternLayout utilise une instance privée de Stringbuffer. Cela signifie que les appels de motifLayout.Format () sont sensibles aux races de données lors d'appels simultanés, tandis que les appels simultanés d'amélioration de Patternlayout.Format () ne sont pas. P>
Oui. Il s'agit d'un peu de mystère que dans quelles conditions le champ code> SB de modèle de modèle code> SB de modèle code> peut causer des problèmes réels - car les appels sont des synchronisé code> de toute façon - au appendererskeleton .Doappend () code> méthode (voir par exemple des sources de log4J 1.2.17). Donc, le améliorépatternlayout code> semble i> pour apporter une utilisation accrue inutile de GC. Et je n'ai jamais vu de sortie cassée / mixte dans les journaux tout en utilisant modèleLayout code> ...
Si les appels sont toujours synchronisés, il est potentiellement avantageux d'être avantages en convertissant la Stringbuffer en StressBuilder dans les deux classes de mise en page. Je suppose que les appels d'annexe ne sont pas garantis pour être synchronisés dans tous les scénarios?
Eh bien, c'est exactement la question - lorsque les appels ne sont pas garantis pour être synchronisés ... concernant StringBuilder, la bibliothèque Log4J ne peut pas utiliser cette classe en raison de la compatibilité avec les anciennes versions de Java qu'elles soutiennent ...
Je l'ai fait un diff sur les deux pages HTML. P>
Et voici les principales différences par rapport à moi: L'intro et deux nouveaux "caractère de conversion" s: J'ai reformaté le texte pour faciliter la lecture. P>
Cette classe est une version améliorée de Cette calepinage doit être utilisé de préférence à
Utilisé pour la sortie des propriétés associées
avec l'événement d'enregistrement. p>
Propriétés b>
mot de conversion peut être suivie par la clé de la
map placé entre accolades, comme dans (reformatée pour une meilleure lisibilité.) P>
Utilisé pour la sortie de la trace Throwable qui a été lié au % propriétés code> et % throwable code> p>
1. Intro h1>
org.apache.log4j.PatternLayout code>
qui a été développé à l'origine dans le cadre de l'log4j abandonnée 1.3
effort et a été disponible dans le compagnon de figurants. p>
org.apache.log4j.PatternLayout code> sauf si la compatibilité
où PatternLayout code> a été étendu soit par subclassing
ou analyseurs de motif alternatif. p>
blockQuote>
2.
Propriétés% code> h1>
Propriétés% {application} code> où
application code> est la clé. La valeur dans le faisceau Propriétés
correspondant à la clé sera sortie. Si aucun sous-option supplémentaire
est spécifiée, le contenu de la valeur des propriétés paire de clés jeu
est sortie en utilisant un format {{key1, val1}, {key2, val2}} code> p>
blockQuote>
3.
% throwable code> h1>
LoggingEvent code>, par défaut, cette sortie la trace complète que l'on devrait normalement trouver par un appel à Throwable.printStackTrace () < / code>. p>
% throwable {short} code> ou % throwable {1} code> va afficher la première ligne de trace de la pile. Li>
{throwable none} code> ou throwable {0} code> supprimer la trace de la pile. Li>
% throwable {n} code> sortie n code> lignes de trace de pile si un nombre entier positif ou omettre le dernier -n code> lignes, si un négatif entier. li>
% throwable code>, le appender prendra en charge à la sortie de la trace de la pile comme il l'entend. Li>
ul>
blockQuote>
Au moins une différence majeure est le support des fuseaux horaires - voir Stackoverflow.com/Questtions/1785725/... .