记录云原生应用

我的日志文件在哪里? 在回答这个问题之前,让我解释一下上下文。 我在云开发领域工作,我们有一种方法,称为12因素应用程序。 Logs是12个因素之一,这是如何定义该因素的方法。

十二要素应用程序永远不会将自己的输出流路由或存储。 它不应尝试写入或管理日志文件。 而是,每个正在运行的进程将其未缓冲的事件流写入stdout。 在本地开发期间,开发人员将在其终端的前台查看此流,以观察应用程序的行为。

如果您不熟悉12因子应用程序,则可在此处获取有关它的更多信息。

但这对我作为开发人员意味着什么? 答案很简单,我将所有日志都写到stdout。 例如,我迅速编写了下一个很酷的Web服务。 然后,您至少需要这两行内容才能写入stdout。


//禁用缓冲以直接写入stdout

setbuf(stdout,nil)

打印(“此行将被打印到标准输出。”)


就是这样,好的,我要说实话,您看到3行代码,但是注释仅用于解释,抱歉。 顺便说一下, setbuf由标准C库提供。 如果您需要不同的日志级别(如调试,错误等),那么您可能对库更感兴趣,库对此提供了支持,并且对日志行的格式也有帮助。 如果我们扩展快速应用程序,那么“ HeliumLogger”将是一个不错的选择。 这个记录器也只写到标准输出,这就是我们需要的一切。

让我们谈谈不同的环境。 如果您在本地计算机上进行开发,则可以在终端中查看应用程序的日志。 但这不是您的应用程序所在的地方。 如果您的应用程序是在Cloud Foundry(CF)提供程序之一上运行的,则可以使用cloud Foundry cli“ cf logs my-swift-app”获取应用程序的日志。 这是可能的,因为Cloud Foundry中的日志路由是由运行时管理的,而输出的一个选项可能是Cloud Foundry cli。


bash $ cf日志打印机-最近
grep APP / PROC / WEB / 0

2017–10–17T22:05:02.03 + 0200 [APP / PROC / WEB / 0] OUT

绅士启动引擎……。

2017–10–17T22:06:56.46 + 0200 [APP / PROC / WEB / 0] OUT此行将打印到标准输出。”


但是,如果您需要过去的日志,那是什么? 老实说,我不知道其他CF提供程序如何处理此问题,但是我在IBM Cloud Foundry方面的经验是,在此用例中,日志被路由到ELK堆栈,并且可以轻松地从WebUi进行访问,这真是太棒了。

最后,我要说的是,每当有来自云开发领域之外的开发人员问我日志在哪里? 我告诉他们我在这里写的确切内容。

感谢您阅读的欢呼声

诺曼


链接

十二要素应用

一种构建现代,可伸缩,可维护的软件即服务应用程序的方法。

12factor.net

idev4u / logprinter-app

通过在GitHub上创建一个帐户为logprinter-app开发做出贡献。

github.com

IBM-Swift / HeliumLogger

HeliumLogger – Swift的轻量级日志框架

github.com

ELK堆栈简介(现在是弹性堆栈) 有弹性

关于此视频:通过结合非常流行的Elasticsearch,Logstash和Kibana(ELK Stack现在是…

www.elastic.co

针对macOS的http://www.manpages.info/freebsd/setbuf.3.html

适用于Linux的http://man7.org/linux/man-pages/man3/setbuf.3.html

    Interesting Posts