CustomFormatter для logrus в Golang для отображения имени файла и номера строки - PullRequest
0 голосов
/ 02 апреля 2020

Я использую github.com / sirupsen / logrus для входа в мои сценарии golang, однако я хочу получить имя файла и номер строки, которая регистрирует сообщение. Я могу получить это, используя следующий код:

package main

import (
    "fmt"
    "os"
    "runtime"
    "strings"

    "github.com/sirupsen/logrus"
)

func GetLogger() (*logrus.Logger, *os.File) {
    log := logrus.New()
    log.SetReportCaller(true)

    file, err := os.OpenFile("info.log", os.O_CREATE|os.O_APPEND, 0644)
    if err != nil {
        log.Fatal(err)
    }

    log.Out = file
    log.Formatter = &logrus.TextFormatter{
        CallerPrettyfier: func(f *runtime.Frame) (string, string) {
            repopath := fmt.Sprintf("%s/src/github.com/bob", os.Getenv("GOPATH"))
            filename := strings.Replace(f.File, repopath, "", -1)
            return fmt.Sprintf("%s()", f.Function), fmt.Sprintf("%s:%d", filename, f.Line)
        },
    }

    return log, file
}

Однако это дает журнал в следующем формате:

time="2020-04-02T11:43:19+05:30" level=info msg=Hello func="main.main()" file="D:/.../main.go:13"

Но я хочу войти формат, как показано ниже:

Apr 02 00:00:00 INFO main.go:20 : Hello this is a log line

Как можно написать собственный форматировщик, чтобы получить это?

1 Ответ

0 голосов
/ 02 апреля 2020

Пакет, который вы используете github.com/sirupsen/logrus, производит структурированный вывод журнала: это пары ключ / значение. Похоже, вам нужен просто текстовый регистратор.

Стандартный регистратор import "log", выводит данные совершенно так, как вы хотите: log.New(out, "INFO", .Ldate|log.Ltime|log.Lshortfile). (См. https://play.golang.org/p/LKitIwjPuVH на игровой площадке)

Вот пример выходных данных:

INFO 2009/11/10 23:00:00 prog.go:10: hello

В go1.14 дополнительный флаг log.Lmsgprefix перемещает INFO перед сообщением, если это предпочтительнее (и вы можете подождать).

Если стандартный библиотечный регистратор не делает то, что вы хотите (и вы не готовы с этим жить), почему бы просто не скопировать это и редактировать это, по сути, сделать свой собственный пакет журнала? Это около 400 строк простого кода, и к тому времени, когда вы удалите ненужные части, это будет намного меньше.

Источник здесь: https://golang.org/src/log/log.go

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