Was ist der Unterschied zwischen Scala StrictLogging und Lazylogging?

10

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.

    
codingsplash 14.01.2017, 10:34
quelle

3 Antworten

8

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:

%Vor%

vs

%Vor%     
Yuval Itzchakov 14.01.2017, 10:56
quelle
6

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?

    
Cole Stanfield 16.03.2017 22:33
quelle
5
  

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.

    
fabfas 14.01.2017 13:55
quelle

Tags und Links