普通的演示代码在集成Logrus的配置和main
的逻辑时起作用,如下所示
func main() {
var filename string = "logfile.log"
f, err := os.OpenFile(filename, os.O_WRONLY|os.O_APPEND|os.O_CREATE, 0644)
Formatter := new(log.TextFormatter)
Formatter.TimestampFormat = "02-01-2006 15:04:05"
Formatter.FullTimestamp = true
log.SetFormatter(Formatter)
if err != nil {
fmt.Println(err)
} else {
log.SetOutput(f)
}
log.Info("Some info. Earth is not flat")
log.Warning("This is a warning")
log.Error("Not fatal. An error. Won't stop execution")
}
但是在现实世界中,应该将logrus的配置分离为单个文件,将文件结构视为:
logrusdemo/
├── main.go
└── mylib
├── aa.go
└── bb.go
我想在这些文件中共享相同的配置:
aa.go
的源代码:
package mylib
// GetTestA testing
func GetTestA() string {
//log.info("entering aa.go")
return "001"
}
bb.go
的源代码:
package mylib
// GetTestB testing
func GetTestB() string {
//log.info("entering bb.go")
return "001"
}
main.go
的源代码:
package main
import (
"fmt"
"logrusdemo/mylib"
)
func main() {
//log.info("entering main")
fmt.Printf("%v", mylib.GetTestA())
fmt.Printf("%v", mylib.GetTestB())
}
我想知道在这种情况下如何使logrus工作?
答案 0 :(得分:2)
您可以通过将记录器传递到结构/函数来实现。
package main
import (
"fmt"
"github.com/sirupsen/logrus"
"logrusdemo/mylib"
)
func main() {
log = logrus.New()
var filename string = "logfile.log"
f, err := os.OpenFile(filename, os.O_WRONLY|os.O_APPEND|os.O_CREATE, 0644)
Formatter := new(log.TextFormatter)
Formatter.TimestampFormat = "02-01-2006 15:04:05"
Formatter.FullTimestamp = true
log.SetFormatter(Formatter)
if err != nil {
fmt.Println(err)
} else {
log.SetOutput(f)
}
log.Info("Some info. Earth is not flat")
log.Warning("This is a warning")
log.Error("Not fatal. An error. Won't stop execution")
fmt.Printf("%v", mylib.GetTestA(log))
fmt.Printf("%v", mylib.GetTestB(log))
}
和
package mylib
import (
"github.com/sirupsen/logrus"
)
// GetTestA testing
func GetTestA(log *logrus.Logger) string {
log.Info("entering aa.go")
return "001"
}
如果您不想将其作为参数传递,也可以在上下文中传递记录器,或将其用作全局变量。