第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

Golang 中 logrus 的 CustomFormatter 以顯示文件名和行號

Golang 中 logrus 的 CustomFormatter 以顯示文件名和行號

Go
侃侃爾雅 2022-05-23 17:24:30
我正在使用github.com/sirupsen/logrus登錄我的 golang 腳本,但是我想獲取記錄消息的文件名和行號。我可以使用以下代碼來獲得它:package mainimport (    "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}但是,這會(huì)以以下格式提供日志: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如何編寫自定義格式化程序來獲得這個(gè)?
查看完整描述

3 回答

?
尚方寶劍之說

TA貢獻(xiàn)1788條經(jīng)驗(yàn) 獲得超4個(gè)贊

自 2018 年底以來,此選項(xiàng)包含在庫本身中。


只需將“SetReportCaller”設(shè)置為 true。


這是一個(gè)例子:


package main


import (

    log "github.com/sirupsen/logrus"

)


func main() {

    // Add this line for logging filename and line number!

    log.SetReportCaller(true)


    log.Println("hello world")

}


輸出:


INFO[0000]/home/trex/go/src/awesomeProject/main.go:11 main.main() hello world  


查看完整回答
反對 回復(fù) 2022-05-23
?
繁星coding

TA貢獻(xiàn)1797條經(jīng)驗(yàn) 獲得超4個(gè)贊

您可以利用下面的代碼


package main


import (

    "bytes"

    "fmt"

    "github.com/sirupsen/logrus"

    "io"

    "os"

    "strings"

)


type MyFormatter struct {}

var levelList = [] string{

    "PANIC",

    "FATAL",

    "ERROR",

    "WARN",

    "INFO",

    "DEBUG",

    "TRACE",

}

func (mf *MyFormatter) Format(entry *logrus.Entry) ([]byte, error){

    var b *bytes.Buffer

    if entry.Buffer != nil {

        b = entry.Buffer

    } else {

        b = &bytes.Buffer{}

    }

    level := levelList[int(entry.Level)]

    strList := strings.Split(entry.Caller.File, "/")

    fileName := strList[len(strList)-1]

    b.WriteString(fmt.Sprintf("%s - %s - [line:%d] - %s - %s\n",

        entry.Time.Format("2006-01-02 15:04:05,678"), fileName,

        entry.Caller.Line, level, entry.Message))

    return b.Bytes(), nil

}


func MakeLogger(filename string, display bool) *logrus.Logger {

    f, err := os.OpenFile(filename, os.O_CREATE|os.O_RDWR|os.O_APPEND, 0644)

    if err != nil {

        panic(err.Error())

    }

    logger := logrus.New()

    if display {

        logger.SetOutput(io.MultiWriter(os.Stdout, f))

    } else {

        logger.SetOutput(io.MultiWriter(f))

    }

    logger.SetReportCaller(true)

    logger.SetFormatter(&MyFormatter{})

    return logger

}



func main()  {

    logger := MakeLogger("/tmp/test.log", true)

    logger.Info("hello world!")

}

結(jié)果:/tmp/test.log


2021-11-24 00:49:10,678 - main.go - [line:58] - 信息 - 你好,世界!


查看完整回答
反對 回復(fù) 2022-05-23
?
猛跑小豬

TA貢獻(xiàn)1858條經(jīng)驗(yàn) 獲得超8個(gè)贊

您使用的包會(huì)github.com/sirupsen/logrus產(chǎn)生結(jié)構(gòu)化的日志輸出:即鍵/值對。看起來您只需要一個(gè)純文本記錄器。

標(biāo)準(zhǔn) loggerimport "log"產(chǎn)生的輸出非常像你想要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 中,額外的標(biāo)志log.Lmsgprefix將 移到INFO消息之前,如果這是可取的(你可以等待)。

如果標(biāo)準(zhǔn)庫記錄器不符合您的要求(并且您不準(zhǔn)備接受它),為什么不直接復(fù)制和編輯它,本質(zhì)上是制作您自己的日志包?它大約有 400 行簡單的代碼,當(dāng)你刪除不需要的部分時(shí),它會(huì)少很多。

來源在這里:https ://golang.org/src/log/log.go


查看完整回答
反對 回復(fù) 2022-05-23
  • 3 回答
  • 0 關(guān)注
  • 461 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號