运行 在本地运行 go app 时,为什么我在终端中看不到 fmt 日志?
Why don't I see fmt logs in my terminal when running go app locally?
我正在尝试调试我的 golang 应用程序。目前,我有一个无法正常工作的 API 请求,其中包含以下代码行:
fmt.Errorf("Object(%q).CopierFrom(%q).Run: %v", dstName, object, err)
如何查看此错误日志的输出?如果不可能,还有哪些其他方法可以在 go 中进行调试? (运行时调用会很好)
fmt.Errorf
创建一个 error
对象;它不打印。
来自 fmt.Errorf
的文档:
func Errorf(format string, a ...interface{}) error
如果您只是想将消息打印到标准输出:
fmt.Printf("Object(%q).CopierFrom(%q).Run: %v\n", dstName, object, err)
如果你想写入错误日志,我建议查看 log
包。例如,如果您要写入 stderr:
logger := log.New(os.Stderr, "my-app", 0)
logger.Printf("Object(%q).CopierFrom(%q).Run: %v", dstName, object, err)
fmt.Errorf
创建一个错误 - 函数 returns 的理想选择 - 但它没有隐式记录。
如果您想简单地记录错误:
log.Printf("api X: error %v", err)
fmt.Errorf()
创建一个错误对象。但不打印。doc
如果您只是想将消息打印到标准输出:
run
package main
import (
"fmt"
)
func main() {
const name, id = "bueller", 17
err := fmt.Errorf("user %q (id %d) not found", name, id)
fmt.Println(err.Error())
}
输出:
user "bueller" (id 17) not found
如果你想调试golang代码,我推荐使用日志包,例如:
zerolog
package main
import (
"errors"
"github.com/rs/zerolog"
"github.com/rs/zerolog/log"
)
func main() {
// UNIX Time is faster and smaller than most timestamps
zerolog.TimeFieldFormat = zerolog.TimeFormatUnix
err := errors.New("seems we have an error here")
log.Error().Err(err).Msg("this is an error")
}
输出:
{"level":"error","error":"seems we have an error here","time":1640795128,"message":"this is an error"}
最好在使用任何函数之前阅读函数签名和注释。
// Errorf formats according to a format specifier and returns the string as a
// value that satisfies error.
//
// If the format specifier includes a %w verb with an error operand,
// the returned error will implement an Unwrap method returning the operand. It is
// invalid to include more than one %w verb or to supply it with an operand
// that does not implement the error interface. The %w verb is otherwise
// a synonym for %v.
func Errorf(format string, a ...interface{}) error
我正在尝试调试我的 golang 应用程序。目前,我有一个无法正常工作的 API 请求,其中包含以下代码行:
fmt.Errorf("Object(%q).CopierFrom(%q).Run: %v", dstName, object, err)
如何查看此错误日志的输出?如果不可能,还有哪些其他方法可以在 go 中进行调试? (运行时调用会很好)
fmt.Errorf
创建一个 error
对象;它不打印。
来自 fmt.Errorf
的文档:
func Errorf(format string, a ...interface{}) error
如果您只是想将消息打印到标准输出:
fmt.Printf("Object(%q).CopierFrom(%q).Run: %v\n", dstName, object, err)
如果你想写入错误日志,我建议查看 log
包。例如,如果您要写入 stderr:
logger := log.New(os.Stderr, "my-app", 0)
logger.Printf("Object(%q).CopierFrom(%q).Run: %v", dstName, object, err)
fmt.Errorf
创建一个错误 - 函数 returns 的理想选择 - 但它没有隐式记录。
如果您想简单地记录错误:
log.Printf("api X: error %v", err)
fmt.Errorf()
创建一个错误对象。但不打印。doc
如果您只是想将消息打印到标准输出: run
package main
import (
"fmt"
)
func main() {
const name, id = "bueller", 17
err := fmt.Errorf("user %q (id %d) not found", name, id)
fmt.Println(err.Error())
}
输出:
user "bueller" (id 17) not found
如果你想调试golang代码,我推荐使用日志包,例如: zerolog
package main
import (
"errors"
"github.com/rs/zerolog"
"github.com/rs/zerolog/log"
)
func main() {
// UNIX Time is faster and smaller than most timestamps
zerolog.TimeFieldFormat = zerolog.TimeFormatUnix
err := errors.New("seems we have an error here")
log.Error().Err(err).Msg("this is an error")
}
输出:
{"level":"error","error":"seems we have an error here","time":1640795128,"message":"this is an error"}
最好在使用任何函数之前阅读函数签名和注释。
// Errorf formats according to a format specifier and returns the string as a
// value that satisfies error.
//
// If the format specifier includes a %w verb with an error operand,
// the returned error will implement an Unwrap method returning the operand. It is
// invalid to include more than one %w verb or to supply it with an operand
// that does not implement the error interface. The %w verb is otherwise
// a synonym for %v.
func Errorf(format string, a ...interface{}) error