Как сделать так, чтобы Logrus golang разделял одну и ту же конфигурацию через несколько файлов? - PullRequest
0 голосов
/ 02 октября 2018

Простой демонстрационный код работает так, как он объединяет конфигурацию 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 работать в этой ситуации?

1 Ответ

0 голосов
/ 02 октября 2018

Вы можете сделать это, передав свой регистратор своим структурам / функциям.

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"
}

Если вы не хотите передавать его в качестве аргумента, выможет также передать ваш логгер в контексте или использовать его как глобальный.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...