with try pods manage logs how handling golang from exceptions erros error define current create context catch go kubernetes glog

go - try - error redefinido bandera glog



kubectl get nodes (4)

Estoy usando glog flag log_dir en mi proyecto. Recientemente importé la biblioteca kubernetes y comencé a tener este pánico en el tiempo de ejecución

panic: ./aaa.test indicador redefinido: log_dir

May 16 23:51:35 ecmdev03-core01 docker[26867]: goroutine 1 [running]: May 16 23:51:35 ecmdev03-core01 docker[26867]: panic(0x15ebc60, 0xc8201aae90) May 16 23:51:35 ecmdev03-core01 docker[26867]: /usr/local/go/src/runtime/panic.go:464 +0x3e6 May 16 23:51:35 ecmdev03-core01 docker[26867]: flag.(*FlagSet).Var(0xc8200160c0, 0x7f561118c1c0, 0xc8201aae40, 0x1bddd70, 0x7, 0x1d75860, 0x2f) May 16 23:51:35 ecmdev03-core01 docker[26867]: /usr/local/go/src/flag/flag.go:776 +0x454 May 16 23:51:35 ecmdev03-core01 docker[26867]: flag.(*FlagSet).StringVar(0xc8200160c0, 0xc8201aae40, 0x1bddd70, 0x7, 0x0, 0x0, 0x1d75860, 0x2f) May 16 23:51:35 ecmdev03-core01 docker[26867]: /usr/local/go/src/flag/flag.go:679 +0xc7 May 16 23:51:35 ecmdev03-core01 docker[26867]: flag.(*FlagSet).String(0xc8200160c0, 0x1bddd70, 0x7, 0x0, 0x0, 0x1d75860, 0x2f, 0xc8201aae30) May 16 23:51:35 ecmdev03-core01 docker[26867]: /usr/local/go/src/flag/flag.go:692 +0x83 May 16 23:51:35 ecmdev03-core01 docker[26867]: flag.String(0x1bddd70, 0x7, 0x0, 0x0, 0x1d75860, 0x2f, 0xba3950) May 16 23:51:35 ecmdev03-core01 docker[26867]: /usr/local/go/src/flag/flag.go:699 +0x5f May 16 23:51:35 ecmdev03-core01 docker[26867]: k8s.io/kubernetes/vendor/github.com/golang/glog.init() May 16 23:51:35 ecmdev03-core01 docker[26867]: /src/ecm_infra/go/src/k8s.io/kubernetes/vendor/github.com/golang/glog/glog_file.go:41 +0x13e May 16 23:51:35 ecmdev03-core01 docker[26867]: k8s.io/kubernetes/pkg/labels.init() May 16 23:51:35 ecmdev03-core01 docker[26867]: /src/ecm_infra/go/src/k8s.io/kubernetes/pkg/labels/selector.go:810 +0x6b May 16 23:51:35 ecmdev03-core01 docker[26867]: k8s.io/kubernetes/pkg/api/unversioned.init() May 16 23:51:35 ecmdev03-core01 docker[26867]: /src/ecm_infra/go/src/k8s.io/kubernetes/pkg/api/unversioned/well_known_labels.go:30 +0x6f May 16 23:51:35 ecmdev03-core01 docker[26867]: k8s.io/kubernetes/pkg/api.init() May 16 23:51:35 ecmdev03-core01 docker[26867]: /src/ecm_infra/go/src/k8s.io/kubernetes/pkg/api/types.go:2731 +0x64

Parece que la biblioteca de glog que es vendida por k8s está en conflicto con la que estoy usando. ¿La introducción del directorio de proveedores es una solución para este problema? ¿Debo usar bibliotecas de vendedores como glide, govendor, gb, etc? Si es así, ¿cuál es el preferido?


Ese error no tiene que ver con bibliotecas en conflicto, es un indicador en conflicto ( log_dir ). Significa que estás agregando una bandera "--log_dir", y la biblioteca de glog utilizada por kubernetes también tiene una bandera log_dir . Este es un problema con la adición de indicadores en las bibliotecas durante el inicio del paquete. Lamentablemente la venta no cambiará nada. Es posible que pueda evitar esto al manipular el flag.CommandLine variable global de la línea de flag.CommandLine para apuntar a un flag.FlagSet diferente. flag.FlagSet al importar su biblioteca de registros o kubernetes, pero eso será complicado ya que depende del orden de importación.


Estaba viendo la flag redefined: log_dir error flag redefined: log_dir y la traza de la pila apuntaban a glog/glog_file.go:41 +0xd3 .

La causa raíz del problema fue el GOPATH .

Tuve dos copias del mismo repositorio en diferentes lugares. Al intentar ejecutar pruebas en una de las copias, el paquete go fue seleccionado del otro repositorio. Así que tenía dos definiciones de todo en glog .

Cambié el nombre del otro repositorio a un nombre nuevo y luego comenzó a funcionar.

Por lo tanto, compruebe su GOPATH y asegúrese de que no está importando bibliotecas de otro lugar.


Me enfrenté a un problema similar cuando vendí mis dependencias usando glide.

Según https://github.com/kubernetes/kubernetes/issues/25572 kubernetes no tiene un glide.lock / glide.yml, el aplanamiento de la dependencia no se produce y al final el glog se define dos veces desde que el proveedor / k8s.io / kubernetes / vendedor también se incluye.

La solución del enlace mencionado anteriormente me funcionó bien:

glide install --strip-vendor --strip-vcs


Utilizo la biblioteca k8s y la marca de cara flag redefined: log_dir problema flag redefined: log_dir . Encontré que varios paquetes de kubernetes no están en mi proveedor. govendor add , el govendor add y luego se solucionó.

Supongo que se construyeron dos copias de glog (una en mi carpeta de proveedores, una en k8s.io/kubernetes/vendor en mi $ GOPATH) cuando esos paquetes no se encuentran en mi carpeta de proveedores.

¿Cómo encontrar paquetes faltantes? Utilizo la forma estúpida, cambio el nombre de $ GOPATH / src / k8s.io a otra cosa y compilo mi proyecto, vea lo que no se encontró. Luego agréguelo ~