使用Golang logrus进行日志记录

简而言之

使用Golang的日志记录包logrus,记录如下所示的日志输出方式。

[INFO]:2020-01-20 03:06:19 [main.go:19]  - info msg1

输出内容包括级别、时间、文件名、行位置和消息。

另外,还需要记录以下内容。

    • ログファイルへの出力

 

    ログレベルの変更

Git: k-washi/gologger

Git:k-washi/gologger

安装

go get github.com/sirupsen/logrus

Logrus的配置文件

首先,创建一个用于设置的函数。
详细信息在程序内部进行记录。

package gologger

import (
    "os"
    "strings"
)

//openFile ログを出力するファイルを設定する。
//ファイルが存在する場合、ファイルにログを追記。
//ファイルが存在しない場合、ファイルを作成し、ログを出力。
func openFile(fileName string) (*os.File, error) {
    if exists(fileName) {
        f, err := os.OpenFile(fileName, os.O_WRONLY|os.O_APPEND, 0777)
        return f, err
    }
    f, err := os.OpenFile(fileName, os.O_WRONLY|os.O_CREATE, 0777)
    return f, err
}

//formatFilePath ログに記載するファイル名の抽出
func formatFilePath(path string) string {
    arr := strings.Split(path, "/")
    return arr[len(arr)-1]

}

//exists ファイルが存在するか確認する。
func exists(name string) bool {
    _, err := os.Stat(name)
    return !os.IsNotExist(err)
}

参照logrus的格式,设置日志格式。
详细信息请查阅程序内部。

package gologger

import (
    "bytes"
    "fmt"
    "io"
    "os"
    "strings"

    "github.com/sirupsen/logrus"
)

type logFormat struct {
    TimestampFormat string
}

//Format ログの形式を設定
func (f *logFormat) Format(entry *logrus.Entry) ([]byte, error) {
    var b *bytes.Buffer

    if entry.Buffer != nil {
        b = entry.Buffer
    } else {
        b = &bytes.Buffer{}
    }

    b.WriteByte('[')
    b.WriteString(strings.ToUpper(entry.Level.String()))
    b.WriteString("]:")
    b.WriteString(entry.Time.Format(f.TimestampFormat))

    b.WriteString(" [")
    b.WriteString(formatFilePath(entry.Caller.File))
    b.WriteString(":")
    fmt.Fprint(b, entry.Caller.Line)
    b.WriteString("] ")

    if entry.Message != "" {
        b.WriteString(" - ")
        b.WriteString(entry.Message)
    }

    if len(entry.Data) > 0 {
        b.WriteString(" || ")
    }
    for key, value := range entry.Data {
        b.WriteString(key)
        b.WriteByte('=')
        b.WriteByte('{')
        fmt.Fprint(b, value)
        b.WriteString("}, ")
    }

    b.WriteByte('\n')
    return b.Bytes(), nil
}

//init パッケージ読み込み時に実行される。
func init() {
    logrus.SetReportCaller(true) //Caller(実行ファイル(ex. main.go)を扱うため)
    formatter := logFormat{}
    formatter.TimestampFormat = "2006-01-02 15:04:05" //時刻設定

    logrus.SetFormatter(&formatter)

    //ログ出力ファイルの設定
    f, err := openFile("log.txt")
    if err != nil {
        logrus.Fatal(err)
    }
    logrus.SetOutput(io.MultiWriter(os.Stdout, f))

    //ログレベルの設定
    logrus.SetLevel(logrus.InfoLevel)

}

//SetLevelDebug Debugレベルに設定
func SetLevelDebug() {
    logrus.SetLevel(logrus.DebugLevel)
}

//SetLevelInfo Set Infoレベルに設定
func SetLevelInfo() {
    logrus.SetLevel(logrus.InfoLevel)
}

记录

通过在main.go中导入配置包,可以读取logrus的配置。如果想要更改日志级别,可以使用已注释的函数。

#出力結果
[INFO]:2020-01-20 03:32:53 [main.go:22]  - info msg1
[INFO]:2020-01-20 03:32:53 [subpkg.go:9]  - sub info msg1
package main

import (
    "github.com/k-washi/gologger/test/subpkg"

    _ "github.com/k-washi/gologger"
    log "github.com/sirupsen/logrus"
)

func main() {
    //logSetter.SetLevelDebug()
    log.Info("info msg1")
    log.Debug("debug msg1")

    subpkg.SubPrint()

}
package subpkg

import (
    log "github.com/sirupsen/logrus"

)

func SubPrint() {

    log.Info("sub info msg1")
    log.Debug("sub debug msg1")

}
广告
将在 10 秒后关闭
bannerAds