Bha*_*rat 5 windows macos logging go
我正在 Mac 上开发一个 Go 程序,该 Mac 上安装了与 Windows 一起安装的 Parallels,以便我可以在两个平台上进行测试。我的程序运行良好。我可以在 Mac 上编译 Windows“.exe”文件并从 Windows 运行它,除了日志文件之外,它运行良好。
我已将记录器设置为将其输出写入文件,如下所示:
log.SetOutput(projectsLog)
Run Code Online (Sandbox Code Playgroud)
其中,projectsLog 在其上方声明,如下所示:
projectsLog *os.File
Run Code Online (Sandbox Code Playgroud)
我正在使用 log.Printf 语句,因为我想要格式化输出。一个例子如下所示:
log.Printf("Error: wrong Hra Class value %s in row %v for project/path %s", hraClass, (rowNum + 1), testDir)
Run Code Online (Sandbox Code Playgroud)
这在 Mac 上运行得很好。使用 log.Printf 的每一行都记录在单独的行上,但在 Windows 上,换行符不显示,并且我得到一行没有换行符。我很清楚unix和windows之间的“\r”和“\r\n”区别。但我认为 log.Printf 会根据其运行的平台而适当地表现?
如果我的假设是错误的,那么我必须采取哪些选项来确保日志文件在 Windows 上可读?如果可以的话,我不想传递标志,例如 -platform windows 或类似的东西。这件事能以透明的方式处理吗?
如前所述,无论操作系统如何(Windows 上也是如此),该fmt包始终用作换行“序列”。\n该包在引擎盖下log使用,因此这也适用于。当调用不以 结尾的函数时(例如),a将按照(转发到的)中记录的方式显式打印。fmtlog...ln()log.Printf()\nLogger.Output()log.Printf()
\n只需作为换行符处理即可。如果您确实需要 print \r\n,则必须通过\r在格式字符串末尾附加一个字符来手动处理,例如:
log.Printf("This will be terminated by CR+LF\r") // \n is appended automatically
Run Code Online (Sandbox Code Playgroud)
您可以为其创建一个包装函数:
func winprintf(format string, a ...interface{}) {
log.Printf(format+"\r", a...)
}
Run Code Online (Sandbox Code Playgroud)
但请注意,这只会打印\r\n在日志条目的末尾;但是如果您\n在格式字符串中使用或参数是s (或者通过调用它们的方法string将导致)包含,那么这些将不会自动变成。您也可以用来处理这些。stringString()\n\r\nstrings.Replace()
| 归档时间: |
|
| 查看次数: |
1619 次 |
| 最近记录: |