У меня есть функция init (), определенная в "config / config.go"
config.go
package config
import(
log "github.com/sirupsen/logrus"
)
func init() {
log.SetReportCaller(true)
}
У меня есть другой файл go с именем auth.go в пакете auth
package auth
import(
log "github.com/sirupsen/logrus"
)
func auth(username string, pwd string) {
//some auth code
log.Info("Auth success")
}
Когда log.Info () вызывается в auth.go, журнал печатается, как показано ниже
2018-11-09T16:38:27+05:30 auth/auth.go:36 level=info msg="Auth success"
Что меня смущает, так это то, как «log» в auth.go знает о настройках, выполненных в config.go
. log.SetReportCaller()
находится в config.go
, но даже когда auth.go
зарегистрирован, он принимает настройки log.SetReportCaller () выполняется в config.go
Поскольку log.SetReportCaller () не установлен в auth.go, ожидаемый журнал должен быть таким, как показано ниже, без указания номера строки метода вызывающего абонента.
2018-11-09T16:38:27+05:30 level=info msg="Auth success"
main.go
package main
import (
"path/to/auth"
log "github.com/sirupsen/logrus"
"net/http"
)
func main() {
r := server.Route()
log.Info("Listening on 8080")
http.Handle("/", r)
log.Fatal(http.ListenAndServe(":8080", nil))
}
авториз / router.go
package auth
import (
"github.com/gorilla/mux"
"github.com/rs/cors"
"net/http"
)
func Route() http.Handler {
r := mux.NewRouter()
// UI handlers
r.HandleFunc("/", IndexPageHandler)
r.HandleFunc("/login", LoginHandler).Methods("POST")
handler := cors.Default().Handler(r)
return
}
авториз / login.go
package auth
import (
"fmt"
"path/to/config"
log "github.com/sirupsen/logrus"
"net/http"
)
func LoginHandler(w http.ResponseWriter, r *http.Request) {
username := r.FormValue("username")
password := r.FormValue("password")
status, userName, mail, _ := auth(username, password)
//some code goes here
}
Пожалуйста, объясните, как это происходит