Wenn Sie das Paket log
verwenden, können Sie den Logger anweisen, die Einträge mit verschiedenen Informationen zu versehen . Sie werden wahrscheinlich am meisten an der Konstante Lshortfile
interessiert sein, die zu Präfixen in der Art d.go:23
führt. Alternativ gibt es Llongfile
, das den vollständigen Pfad der Datei ausgibt (z. B. /a/b/c/d.go:23
).
Wenn Sie das log
-Paket nicht verwenden möchten, können Sie auch runtime.Caller()
verwenden. Das ist, was das Protokollpaket intern verwendet. Es ist nicht so einfach wie die C-Makros, aber Sie können es hinter einer Funktion verbergen (und die korrekte Aufruftiefe angeben). Sie können sehen, wie das Protokollpaket implementiert wird für ein Beispiel (Zeile 140).
(1) Schreiben Sie eine kurze Funktion, die runtime.Caller ()
aufruft(2) Rufen Sie diese Funktion überall auf, wenn Sie zur Laufzeit auf die Quellcodedatei und die Zeilennummer zugreifen möchten.
Beispiel:
%Vor%Hinweis: übergeben Sie 1 an Caller (), so dass es die Nummer der Zeile zurückgibt, in der file_line () aufgerufen wird, anstelle von wo runtime.Caller () aufgerufen wird.
%Vor% Siehe die Pakete runtime
und runtime.debug
und insbesondere die Funktionen Stack
, PrintStack
oder Caller
.
Stack formatiert einen Stack-Trace der aufrufenden Goroutine in buf und gibt die Anzahl der Bytes zurück, die auf buf geschrieben wurden. Wenn alles wahr ist, stapelt das Stack-Format die Spuren aller anderen Goroutinen nach dem Trace für die aktuelle Goroutine in buf.
Wenn Sie mit Debug-Informationen kompilieren, sollte dies die Zeilennummer in der Quelle
enthalten