Estaba tratando de arrojar errores en mi programa Golang con log.Fatal
, pero log.Fatal
tampoco imprime la línea donde log.Fatal
se ejecutó. ¿No hay forma de acceder al número de línea que llamó log.Fatal? es decir, ¿hay alguna forma de obtener el número de línea cuando se produce un error?
Estaba tratando de buscar en Google esto, pero no estaba seguro de cómo. Lo mejor que pude conseguir fue imprimir el seguimiento de la pila , que supongo que es bueno, pero puede que sea demasiado. Tampoco quiero escribir debug.PrintStack()
cada vez que necesito el número de línea, solo me sorprende que no haya ninguna función incorporada para esto log.FatalStackTrace()
o algo que no sea un disfraz.
Además, la razón por la que no quiero hacer mi propia depuración / manejo de errores es porque no quiero que la gente tenga que aprender a usar mi código especial de manejo de vestuario. Solo quiero algo estándar donde la gente pueda leer mi código más tarde y ser como
"Ah, está bien, entonces está arrojando un error y haciendo X ..."
Cuanta menos gente tenga que aprender sobre mi código, mejor :)
fuente
Respuestas:
Puede configurar los indicadores en un registrador personalizado o en el predeterminado para incluir
Llongfile
oLshortfile
fuente
var mylog = log.New(os.Stderr, "app: ", log.LstdFlags | log.Lshortfile)
.expected declaration, found 'INDENT' log
cuando intento hacerlolog.SetFlags(log.LstdFlags | log.Lshortfile)
. Simplemente me irrita tener que crear una variable para él, ¿por qué no puede haber unlog.Fatal("string", log.Flag)
. Pero la creación de un nuevo registro de variables funcionó. ¿Es algo estándar crear variables de registro y esas cosas?func init() {}
Version corta,
no hay nada directamente incorporado, sin embargo, puede implementarlo con una curva de aprendizaje mínima utilizandoruntime.Caller
playground
fuente
fn
variable asignada desderuntime.Caller()
es en realidad el nombre del archivo, no una referencia de función. Pienso en fn como una función, no como un nombre de archivo .runtime
uso de paquetes. Muy útil para depurar registros.Si necesita exactamente un seguimiento de pila, eche un vistazo a https://github.com/ztrue/tracerr
Creé este paquete para tener tanto el seguimiento de la pila como los fragmentos de origen para poder depurar más rápido y registrar errores con muchos más detalles.
Aquí hay un ejemplo de código:
Y aquí está la salida:
fuente