Betrachten Sie den folgenden Code, der die Scala-Protokollierung verwendet:
%Vor%Was ist der Unterschied, wenn ich stattdessen StrictLogging verwende? Wann sollte ich welche verwenden?
Bearbeiten : Ich weiß, was faul ist. Aber ich bin nicht in der Lage, es aus der Logging-Perspektive zu bekommen und wie unterscheidet es sich von seiner Funktionalität im Vergleich zu strenger Protokollierung. Das ist so, dass ich verstehen kann, wann ich welche verwenden soll.
Ich gehe davon aus, dass Sie sich auf typesafes scala-logging beziehen. Der Unterschied besteht nur in der Art, wie logger
vom zugrunde liegenden Logger definiert wird, er kann entweder als normaler Wert oder als fauler Wert definiert werden, was bedeutet:
vs
%Vor% Nun, jeder scheint zu wissen, was lazy
bedeutet, hat aber nicht wirklich erwähnt, wie sich das auf Ihre Wahl auswirkt, also werde ich versuchen, die Richtlinien aufzuzählen, die ich selbst befolge.
Verwenden Sie StrictLogging
pretty standardmäßig, besonders wenn die Klasse ein Singleton ist oder Sie wissen, dass die Log-Methoden immer aufgerufen werden.
Verwenden Sie LazyLogging
, wenn Sie viele Objekte mit dieser Eigenschaft wiederholt erstellen. Wenn Sie das tun, denken Sie vielleicht darüber nach, diesen Logger in ein Companion-Objekt der Klasse zu schreiben, damit Sie Logger
nicht instanziieren und LoggerFactory.getLogger(...)
immer wieder aufrufen.
Kann jemand an andere Gründe denken, LazyLogging
über StrictLogging
zu verwenden / nicht zu verwenden?
Was ist der Unterschied zwischen Scala StrictLogging und Lazylogging?
Lasst uns zuerst beide Eigenschaften lesen;
%Vor% Der Hauptunterschied ist @volatile
und lazy
keywords.
Wie funktioniert lazy
?
Das Hauptmerkmal von lazy val
ist, dass der gebundene Ausdruck nicht sofort ausgewertet wird, sondern einmal beim ersten Zugriff. Wenn der anfängliche Zugriff erfolgt, wird der Ausdruck ausgewertet. Beim späteren Zugriff erfolgt keine weitere Auswertung, stattdessen wird das gespeicherte Ergebnis sofort zurückgegeben.
Bei Multithread-Szenarien erzwingt @volatile
den Speicher über mehrere Threads hinweg in einen konsistenten Zustand.
Tatsächlich hängt es vom individuellen Anwendungsfall ab, welches Merkmal LazyLogging
oder StrictLogging
verwendet.