gpt4 book ai didi

windows - Golang 中的跨平台日志记录

转载 作者:IT王子 更新时间:2023-10-29 00:47:25 27 4
gpt4 key购买 nike

我正在 Mac 上开发一个 Go 程序,Mac 上安装了 Parallels 和 Windows,这样我就可以在两个平台上进行测试。我的程序运行良好。我可以在我的 Mac 上编译一个 Windows“.exe”文件并从 Windows 运行它,除了日志文件外它运行良好。

我已将记录器设置为将其输出写入如下文件:

log.SetOutput(projectsLog)

projectsLog 在其上方声明,如下所示:

projectsLog *os.File

我正在使用 log.Printf 语句,因为我想要格式化输出。示例如下:

log.Printf("Error: wrong Hra Class value %s in row %v for project/path %s", hraClass, (rowNum + 1), testDir)

这在 Mac 上运行良好。使用 log.Printf 的每一行都记录在单独的行上,但在 Windows 上不显示换行符,我得到的一行没有换行符。我很清楚 unix 和 windows 之间的“\r”和“\r\n”区别。但我认为 log.Printf 会根据其运行的平台做出适当的行为?

如果我的假设是错误的,那么我必须使用哪些选项来确保日志文件在 Windows 上可读?如果可以,我不想传递标志,例如 -platform windows 或类似的东西。这可以以透明的方式处理吗?

最佳答案

如前所述,fmt软件包始终使用 \n 作为换行符“序列”,而不管操作系统如何(在 Windows 上也是如此)。 log包在后台使用 fmt,因此同样适用于 log。当调用不以 ...ln() 结尾的函数时(例如 log.Printf()),一个 \n 将是如 Logger.Output() 中的记录明确打印(log.Printf() 转发到的)。

只需将\n作为换行符处理即可。如果确实需要打印 \r\n,则必须通过在格式字符串末尾附加 \r 字符来手动处理,例如:

log.Printf("This will be terminated by CR+LF\r") // \n is appended automatically

你可以为它创建一个包装函数:

func winprintf(format string, a ...interface{}) {
log.Printf(format+"\r", a...)
}

请注意,这只会在日志条目的末尾打印 \r\n;但是,如果您在格式字符串中使用 \n 或者参数是 string(或者将通过调用它们的 生成 string String() 方法)包含\n,那些不会自动变成\r\n。您可以使用 strings.Replace()也可以处理这些。

关于windows - Golang 中的跨平台日志记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35555692/

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