J'essayais de lancer des erreurs dans mon programme Golang avec log.Fatal
mais, log.Fatal
n'imprime pas également la ligne où le a log.Fatal
été exécuté. N'existe-t-il aucun moyen d'accéder au numéro de ligne qui a appelé log.Fatal? ie y a-t-il un moyen d'obtenir le numéro de ligne lors du lancement d'une erreur?
J'essayais de google mais je ne savais pas comment. La meilleure chose que j'ai pu obtenir a été d' imprimer la trace de la pile , ce qui, je suppose, est bon mais peut-être un peu trop. Je ne veux pas non plus écrire debug.PrintStack()
chaque fois que j'ai besoin du numéro de ligne, je suis juste surpris qu'il n'y ait pas de fonction intégrée pour cela log.FatalStackTrace()
ou quelque chose qui n'est pas un costume.
Aussi, la raison pour laquelle je ne veux pas faire mes propres trucs de débogage / gestion des erreurs est que je ne veux pas que les gens doivent apprendre à utiliser mon code spécial de gestion des costumes. Je veux juste quelque chose de standard où les gens peuvent lire mon code plus tard et être comme
"ah ok, donc il lance une erreur et fait X ..."
Moins les gens doivent apprendre mon code, mieux c'est :)
la source
Réponses:
Vous pouvez définir les indicateurs sur un enregistreur personnalisé ou la valeur par défaut pour inclure
Llongfile
ouLshortfile
la source
var mylog = log.New(os.Stderr, "app: ", log.LstdFlags | log.Lshortfile)
.expected declaration, found 'INDENT' log
quand j'essaye de fairelog.SetFlags(log.LstdFlags | log.Lshortfile)
. Cela m'irrite juste d'avoir à créer une variable pour cela, pourquoi n'y a-t-il pas de fichierlog.Fatal("string", log.Flag)
. Mais la création d'un nouveau journal de variables a fonctionné. Est-ce une chose standard pour créer des variables de journal et autres?func init() {}
Version courte,
il n'y a rien directement intégré, mais vous pouvez l'implémenter avec une courbe d'apprentissage minimale en utilisantruntime.Caller
playground
la source
fn
variable attribuée à partir deruntime.Caller()
est en fait le nom du fichier, pas une référence de fonction. Je considère fn comme une fonction, pas comme un nom de fichier .runtime
utilisation de package. Très utile pour le débogage via les journaux.Si vous avez besoin exactement d'une trace de pile, jetez un œil à https://github.com/ztrue/tracerr
J'ai créé ce package afin d'avoir à la fois la trace de la pile et les fragments source pour pouvoir déboguer plus rapidement et enregistrer les erreurs avec beaucoup plus de détails.
Voici un exemple de code:
Et voici la sortie:
la source