Ich habe versucht, Fehler in mein Golang-Programm mit zu werfen, druckt log.Fatal
aber log.Fatal
nicht auch die Zeile, in der das ausgeführt log.Fatal
wurde. Gibt es keine Möglichkeit, auf die Zeilennummer log.Fatal zuzugreifen? dh gibt es eine Möglichkeit, die Zeilennummer zu erhalten, wenn ein Fehler ausgegeben wird?
Ich habe versucht, dies zu googeln, war mir aber nicht sicher, wie. Das Beste, was ich bekommen konnte, war das Drucken der Stapelspur , was meiner Meinung nach gut ist, aber möglicherweise etwas zu viel. Ich möchte auch nicht debug.PrintStack()
jedes Mal schreiben, wenn ich die Zeilennummer brauche. Ich bin nur überrascht, dass es dafür keine eingebaute Funktion gibt log.FatalStackTrace()
oder etwas, das kein Kostüm ist.
Der Grund, warum ich kein eigenes Debugging- / Fehlerbehandlungsmaterial erstellen möchte, ist, dass ich nicht möchte, dass die Leute lernen müssen, wie sie meinen speziellen Kostümhandhabungscode verwenden. Ich möchte nur einen Standard, in dem die Leute meinen Code später lesen und so sein können
"ah ok, also wirft es einen Fehler und macht X ..."
Je weniger Leute über meinen Code lernen müssen, desto besser :)
quelle
Antworten:
Sie können die Flags entweder für einen benutzerdefinierten Logger oder standardmäßig für oder festlegen
Llongfile
Lshortfile
quelle
var mylog = log.New(os.Stderr, "app: ", log.LstdFlags | log.Lshortfile)
.expected declaration, found 'INDENT' log
Wenn ich es versuchelog.SetFlags(log.LstdFlags | log.Lshortfile)
. Es irritiert mich nur, eine Variable dafür erstellen zu müssen, warum kann es keine gebenlog.Fatal("string", log.Flag)
. Das Erstellen eines neuen Variablenprotokolls hat jedoch funktioniert. Ist es Standard, Protokollvariablen und ähnliches zu erstellen?func init() {}
Kurzfassung,
Es ist nichts direkt eingebautSie können es jedoch mit einer minimalen Lernkurve implementierenruntime.Caller
playground
quelle
fn
zugewiesene Variableruntime.Caller()
ist eigentlich der Name der Datei, keine Funktionsreferenz. Ich stelle mir fn als Funktion vor, nicht als Dateinamen .runtime
Verwendung von Paketen. Sehr hilfreich beim Debuggen durch Protokolle.Wenn Sie genau einen Stack-Trace benötigen, besuchen Sie https://github.com/ztrue/tracerr
Ich habe dieses Paket erstellt, damit sowohl Stack-Trace- als auch Quellfragmente schneller debuggen und Fehler mit viel mehr Details protokollieren können.
Hier ist ein Codebeispiel:
Und hier ist die Ausgabe:
quelle