gpt4 book ai didi

go - 如何打印原始日志以使用 Go 流畅而不是使用 json 映射

转载 作者:行者123 更新时间:2023-12-01 22:27:33 26 4
gpt4 key购买 nike

我正在使用 golang 函数将日志打印到 fluentd。 Fluent Post() 方法只接受 map 而不接受字符串。我需要一个函数来打印原始文本,而不是强制我创建 map 。

那可能吗?

下面是我的代码:

package main

import (
"fmt"
"os"
"time"

"github.com/fluent/fluent-logger-golang/fluent"
)

var Flogger *fluent.Fluent

func init() {
initFluent()

}

func initFluent() {
var err error
Flogger, err = fluent.New(fluent.Config{FluentPort: 24224, FluentHost: "127.0.0.1"})
if err != nil {
fmt.Printf("Could not connect to Fluent at %s Error : %v", os.Getenv("FLUENTHOST"), err)
}
}

// DebugLog (msg string) Logs the string to Fluent server
func DebugLog(msg string) {
//Flogger.Post("debug.access", map[string]string{"data": msg})
Flogger.EncodeAndPostData("debug.access", time.Now(), map[string]string{"data": msg}) // both methods give same result
}

func main() {
msg := `{"mykey":"myval"}`
fmt.Println(msg) // prints {"mykey":"myval"}
DebugLog(msg) // prints {"data":"{\"mykey\":\"myval\"}"} with extra \

}

最佳答案

根据 Fluent GoDoc 的函数签名如下:

func (f *Fluent) EncodeAndPostData(tag string, tm time.Time, message interface{}) error
func (f *Fluent) Post(tag string, message interface{}) error

这两个函数都接受空接口(interface)作为消息参数。所有 Go 类型都满足接口(interface),所以你可以传入任何你想要的东西。

但是,Fluentd 是一个结构化的日志库,主要依赖于 JSON。编码数据。通常在使用第三方库时,按照预期的方式使用它会很好。

Fluentd tries to structure data as JSON as much as possible: this allows Fluentd to unify all facets of processing log data: collecting, filtering, buffering, and outputting logs across multiple sources and destinations



来源: Fluentd Website

关于go - 如何打印原始日志以使用 Go 流畅而不是使用 json 映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59026166/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com