Ich stelle eine API bereit und muss wissen, wo Methoden der API aufgerufen wurden. Ich könnte natürlich Reflektion oder den Thread Stacktrace verwenden, aber das würde eine Menge Laufzeitkosten beinhalten.
Ich brauche nicht den genauen Klassennamen, eine eindeutige Referenz pro Aufruf wäre ausreichend. In C würde ich normalerweise den Präprozessor verwenden, um __FILE__
und __LINE__
automatisch zum Methodenaufruf hinzuzufügen.
Gibt es in Java (neben der Codegenerierung) eine Methode, um eine eindeutige Anruferkennung mit geringen Laufzeitkosten zu erhalten?
Eine Lösung wäre, ein zwischengespeichertes Throwable zu haben, das übergeben wird.
%Vor%Hinweis: Wenn sich die Methode, die diesen Aufrufer aufruft, ändert, wird nur die erste aufgezeichnet.
Es gibt kein Standardmuster und wenn Sie möchten, dass dies effizient ist, muss der Anrufer eine eindeutige ID übergeben. Das nächste, was Sie tun können, ist ein Lambda.
%Vor%Sie können es so nennen
%Vor%Dadurch wird für jede aufgerufene Stelle eine andere Klasse erstellt, auch wenn sie mehrmals in derselben Zeile erscheint. Es erstellt keinen Müll, da es jedes Mal das gleiche Objekt wiederverwendet. Sie könnten dies mit
kürzer machen %Vor%und rufe
an %Vor%Wenn etwas Asynchrones involviert ist, teilen Sie den Aufruf auf, und lassen Sie die API die ID zurückgeben.
%Vor%Das Zurückgeben eines Ergebnisses (synchron) ist wahrscheinlich bei Ihrem Code nicht der Fall. Ihr Code wird das Ergebnis an anderer Stelle erhalten. Aber das könnte auch ein Ticketsystem sein.
Tags und Links java stack-trace