为了账号安全,请及时绑定邮箱和手机立即绑定

有什么方法可以使用 golang std 库来格式化日志(如下所述)?

有什么方法可以使用 golang std 库来格式化日志(如下所述)?

Go
慕斯709654 2023-04-04 17:02:07
2018 年 2 月 1 日下午 3:04:05(UTC)| 这是日志消息2018-02-01T15:04:05Z | 这是日志消息我在 go src 中找到了下一个格式: https: //github.com/golang/go/blob/master/src/log/log.go#L37 但似乎我无法仅使用那些格式来做到这一点..
查看完整描述

2 回答

?
繁花不似锦

TA贡献1851条经验 获得超4个赞

https://play.golang.org/p/hPCn3MflkgQ 这是一个答案。您应该处理 Writer 接口并使用它创建新的 Log



查看完整回答
反对 回复 2023-04-04
?
Smart猫小萌

TA贡献1911条经验 获得超7个赞

这里有两个选项:


使用 log.SetOutput 设置自定义编写器。


或者使用 fmt 包而不是只打印到 stdout 或其他地方 - stdlib 日志包没有做太多,它很容易创建你自己的日志包,它以自定义时间格式输出到 stdout(或日志文件) . 例如,这里有几行这样的包:


package log


import (

    "fmt"

    "time"

)


var TimeFormat = "2006-02-01T15:04:05Z"


func Printf(format string, args ...interface{}) {

    format = fmt.Sprintf("%s %s", time.Now().Format(TimeFormat), format)

    fmt.Printf(format, args...)

}

如果您有特定需求,我建议您自己执行此操作,并使用 fmt.Printf 输出到标准输出。你真的不需要第三方日志包。


查看完整回答
反对 回复 2023-04-04
?
当年话下

TA贡献1890条经验 获得超9个赞

您可以log.SetOutput(...)与使用所需格式(例如内置 RFC3999 或您选择的格式之一)打印条目的参数编写器一起使用,例如:

const timeFormat = time.RFC3339


type logWriter struct{}


func (lw *logWriter) Write(bs []byte) (int, error) {

  return fmt.Print(time.Now().UTC().Format(timeFormat), " | ", string(bs))

}


func main() {

  log.SetFlags(0)               // Omit default prefixes.

  log.SetOutput(new(logWriter)) // Use our custom writer.


  log.Printf("Hello, %s!", "World")

  // 2018-09-18T14:50:40Z | Hello, World!

}

您可以使用不同的格式更改时间戳,例如:


const timeFormat = "Jan 2, 2006 at 3:04:05pm (UTC)"


// ...

  log.Printf("Hello, %s!", "World")

  // Sep 18, 2018 at 2:52:26pm (UTC) | Hello, World!


查看完整回答
反对 回复 2023-04-04
  • 2 回答
  • 0 关注
  • 131 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信