获取日志文件中的结构字符串

huangapple go评论129阅读模式
英文:

get struct string in log file

问题

我有一个脚本打印相同的日志,如下所示:

type Country struct {
  cityName string
}

var c Country

然后我执行了以下代码:

var logger = logrus.New()
logger.Debug(c)

但是在日志文件中,它看起来像这样:

country_name:\"\7\6\6\5\3\5\" 

我想知道 \\347\\276\\216\\345\\233\\275\ 代表什么意思,以及如何在我的脚本中读取真实的值。

英文:

I have a script to print the same log like:

type Country stuct{
  cityName string
}

var c Country

and I

var logger = logrus.New()
logger.Debug(c)

but in the log file, it looks like:

country_name:\"\7\6\6\5\3\5\" 

I want to know what \\347\\276\\216\\345\\233\\275\ means and how to read the true meanwhile my script read the log file.

答案1

得分: 3

默认的logrus formatter 使用ASCII编码写入JSON。您需要实现自己的格式化程序并使用UTF-8编码。请参阅Logger.SetFormatter

当我查看源代码时,我没有看到可以设置更改编码的设置。

英文:

The default logrus formatter writes JSON with ASCII encoding. You need to implement your own formatter and use UTF-8. See Logger.SetFormatter.

As I looked into the source code I didn't see any setting that can be set to change the encoding.

答案2

得分: 0

func convertOctonaryUtf8(in string) string {
s := []byte(in)
reg := regexp.MustCompile(\\[0-7]{3})

out := reg.ReplaceAllFunc(s,
    func(b []byte) []byte {
        i, _ := strconv.ParseInt(string(b[1:]), 8, 0)
        return []byte{byte(i)}
    })
return string(out)

}

这个函数的作用是将字符串中的八进制转换为UTF-8字符。

英文:
func convertOctonaryUtf8(in string) string {
	s := []byte(in)
	reg := regexp.MustCompile(`\\[0-7]{3}`)

	out := reg.ReplaceAllFunc(s,
		func(b []byte) []byte {
			i, _ := strconv.ParseInt(string(b[1:]), 8, 0)
			return []byte{byte(i)}
		})
	return string(out)
}

the func get the "\347\276\216\345\233\275" mean

huangapple
  • 本文由 发表于 2019年12月11日 15:49:21
  • 转载请务必保留本文链接:https://go.coder-hub.com/59281024.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定