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

我应该在生产代码中使用 fmt 吗?

我应该在生产代码中使用 fmt 吗?

Go
梵蒂冈之花 2022-01-04 18:54:12
我看到很多Go类似这样的代码:func main() {    response, _, err := http.Get("http://golang.org/")    if err != nil {        fmt.Printf("%s", err)        os.Exit(1)    }    defer response.Body.Close()    contents, err := ioutil.ReadAll(response.Body)    if err != nil {        fmt.Printf("%s", err)        os.Exit(1)    }    fmt.Printf("%s\n", string(contents))}我的问题是:在生产中,我应该保留这些fmt.Printf语句吗?愚蠢的问题我确定但只是检查您为生产代码和开发推荐哪些日志记录选项?
查看完整描述

3 回答

?
慕勒3428872

TA贡献1848条经验 获得超6个赞

认为printf在某些情况下使用s是可以接受的。最好在生产环境中使用不同的日志记录策略。

例如,如果您的应用程序是在后台运行的守护进程,fmt.Printf除非您不将它们通过管道传输到文件中,否则您将错过所有的应用程序。

进行 looging 的一个好方法是使用日志轮换(因为您不想拥有非常大的文件)而不是重新发明自己的 logrotate,您可以根据需要使用标准包或外部包。

Golang 提供了一个日志syslog子包,是依赖操作系统 syslog 做简单日志的最佳解决方案。


查看完整回答
反对 回复 2022-01-04
?
拉莫斯之舞

TA贡献1820条经验 获得超10个赞

fmt.Printf() 适合开始勾勒您的程序,但您可能应该删除它们或替换为真实的日志记录语句。

如果我需要更多,我对标准日志logrus祝你好运。

所有日志记录都取决于其他与操作相关的问题,因此谁/什么正在处理/查看日志很重要。


查看完整回答
反对 回复 2022-01-04
?
慕容708150

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

我认为最好的方法是准备您的代码,以便在启动 go 应用程序时使用输入参数轻松地从开发环境切换到生产环境。


您可以创建不同级别的日志:


“始终”日志级别


此日志级别始终处于启用状态,提供有关应用程序状态的重要信息(如果需要)。还报告崩溃消息。


“测试”日志级别


当您的代码完成时,此日志级别包含有用的信息,但您必须检查一些在代码投入生产时不再有用的信息


“调试”日志级别


当您在开发环境中开发新功能或优化现有代码时,此日志级别包含有用的信息


在我看来,最好的方法是使用chan s,它允许您创建一个异步守护程序并在您想要的任何地方记录任何您想要的内容。


你可以在这里阅读一些关于陈的信息。


守护进程的一个例子可能是:


func daemonLogging(importantMessage chan error, testingMessage chan error,debugMessage chan error){

    for{


        if globalDebugFlag == true{

            // Log debug message

        }


        if globalTestingMessage == true{

            // Log Testing message

        }


        // Log important message

    }

}

记得用go关键字调用这个函数


我认为你使用什么包并不重要(如果你没有任何需要)但重要的是你决定如何记录你的消息


查看完整回答
反对 回复 2022-01-04
  • 3 回答
  • 0 关注
  • 159 浏览
慕课专栏
更多

添加回答

举报

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