登录
首页 >  Golang >  Go问答

如何在自定义文件中记录 fmt.Printf

来源:stackoverflow

时间:2024-04-11 12:18:37 275浏览 收藏

今天golang学习网给大家带来了《如何在自定义文件中记录 fmt.Printf》,其中涉及到的知识点包括等等,无论你是小白还是老手,都适合看一看哦~有好的建议也欢迎大家在评论留言,若是看完有所收获,也希望大家能多多点赞支持呀!一起加油学习~

问题内容

我有一个用于记录的函数:

func formattedlog(prefix, m string, color int) {
    fmt.printf("\033[%dm%s", color, datetimeformat)
    fmt.printf("▶ %s: %s\033[%dm\n", prefix, m, int(black))
}

我想将日志输出保存在某个文件中:

f, err := os.openfile("../../../go-logs.txt", os.o_wronly|os.o_create|os.o_append, 0666)
if err != nil {
    log.fatal("error opening logs file", err)
}
defer f.close()
//set output of logs to f
log.setoutput(f)
log.println("this is a test log entry") // <====this logs in file

但是当我调用使用 fmt.printf 的函数时,它不会登录到文件 go-logs.txt

formattedErr("ERR", msg, err.Error(), int(Red))

是否还可以为 fmt.printf 设置输出


解决方案


fmt.Printf() 写入标准输出的文档:

printf 根据格式说明符进行格式化并写入标准输出

因此没有 fmt.setoutput() 将其重定向到您的文件。

但请注意,标准输出是一个 variable in the os 包:

stdin、stdout 和 stderr 是指向标准输入、标准输出和标准错误文件描述符的开放文件。

请注意,go 运行时会针对恐慌和崩溃写入标准错误;关闭 stderr 可能会导致这些消息发送到其他地方,也许发送到稍后打开的文件。

var (
        Stdin  = NewFile(uintptr(syscall.Stdin), "/dev/stdin")
        Stdout = NewFile(uintptr(syscall.Stdout), "/dev/stdout")
        Stderr = NewFile(uintptr(syscall.Stderr), "/dev/stderr")
)

并且您可以将自己的 os.File 设置为 os.stdout。尽管对记录器使用相同的 os.file 并将其设置为 os.stdout 并不是一个好主意,但对其 file.write() 方法的访问不会在 fmt 包和记录器之间同步。 p>

最好是在任何地方使用 log.Logger(您正确设置其输出,以便日志消息能够正确序列化)。

终于介绍完啦!小伙伴们,这篇关于《如何在自定义文件中记录 fmt.Printf》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布Golang相关知识,快来关注吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>