diff --git a/zh/11.3.md b/zh/11.3.md index 6d4449ce..b8f1ab1c 100644 --- a/zh/11.3.md +++ b/zh/11.3.md @@ -3,7 +3,7 @@ Go语言中自带有一个轻量级的测试框架`testing`和自带的`go test`命令来实现单元测试和性能测试,`testing`框架和其他语言中的测试框架类似,你可以基于这个框架写针对相应函数的测试用例,也可以基于该框架写相应的压力测试用例,那么接下来让我们一一来看一下怎么写。 -另外建议[gotests](https://github.com/cweill/gotests)插件自动生成测试代码: +另外建议安装[gotests](https://github.com/cweill/gotests)插件自动生成测试代码: ```Go go get -u -v github.com/cweill/gotests/... diff --git a/zh/12.1.md b/zh/12.1.md index 8f039b3e..8e1ef6b3 100644 --- a/zh/12.1.md +++ b/zh/12.1.md @@ -1,6 +1,8 @@ # 12.1 应用日志 我们期望开发的Web应用程序能够把整个程序运行过程中出现的各种事件一一记录下来,Go语言中提供了一个简易的log包,我们使用该包可以方便的实现日志记录的功能,这些日志都是基于fmt包的打印再结合panic之类的函数来进行一般的打印、抛出错误处理。Go目前标准包只是包含了简单的功能,如果我们想把我们的应用日志保存到文件,然后又能够结合日志实现很多复杂的功能(编写过Java或者C++的读者应该都使用过log4j和log4cpp之类的日志工具),可以使用第三方开发的一个日志系统,`https://github.com/cihub/seelog`,它实现了很强大的日志功能。接下来我们介绍如何通过该日志系统来实现我们应用的日志功能。 +[logrus](https://github.com/sirupsen/logrus)是另外一个不错的日志系统,结合自己项目选择 + ## seelog介绍 seelog是用Go语言实现的一个日志系统,它提供了一些简单的函数来实现复杂的日志分配、过滤和格式化。主要有如下特性: @@ -18,10 +20,13 @@ seelog是用Go语言实现的一个日志系统,它提供了一些简单的函 上面只列举了部分特性,seelog是一个特别强大的日志处理系统,详细的内容请参看官方wiki。接下来我将简要介绍一下如何在项目中使用它: 首先安装seelog +```Go go get -u github.com/cihub/seelog - + +``` 然后我们来看一个简单的例子: +```Go package main @@ -32,10 +37,12 @@ seelog是用Go语言实现的一个日志系统,它提供了一些简单的函 log.Info("Hello from Seelog!") } +``` 编译后运行如果出现了`Hello from seelog`,说明seelog日志系统已经成功安装并且可以正常运行了。 ## 基于seelog的自定义日志处理 seelog支持自定义日志处理,下面是我基于它自定义的日志处理包的部分内容: +```Go package logs @@ -90,7 +97,7 @@ seelog支持自定义日志处理,下面是我基于它自定义的日志处 func UseLogger(newLogger seelog.LoggerInterface) { Logger = newLogger } - +``` 上面主要实现了三个函数, - `DisableLog` @@ -116,6 +123,7 @@ seelog支持自定义日志处理,下面是我基于它自定义的日志处 设置当前的日志器为相应的日志处理 上面我们定义了一个自定义的日志处理包,下面就是使用示例: +```Go package main @@ -132,29 +140,32 @@ seelog支持自定义日志处理,下面是我基于它自定义的日志处 err := http.ListenAndServe(addr, routes.NewMux()) logs.Logger.Critical("Server err:%v", err) } - +``` ## 发生错误发送邮件 上面的例子解释了如何设置发送邮件,我们通过如下的smtp配置用来发送邮件: +```html - +``` 邮件的格式通过criticalemail配置,然后通过其他的配置发送邮件服务器的配置,通过recipient配置接收邮件的用户,如果有多个用户可以再添加一行。 要测试这个代码是否正常工作,可以在代码中增加类似下面的一个假消息。不过记住过后要把它删除,否则上线之后就会收到很多垃圾邮件。 +```Go logs.Logger.Critical("test Critical message") - +``` 现在,只要我们的应用在线上记录一个Critical的信息,你的邮箱就会收到一个Email,这样一旦线上的系统出现问题,你就能立马通过邮件获知,就能及时的进行处理。 ## 使用应用日志 对于应用日志,每个人的应用场景可能会各不相同,有些人利用应用日志来做数据分析,有些人利用应用日志来做性能分析,有些人来做用户行为分析,还有些就是纯粹的记录,以方便应用出现问题的时候辅助查找问题。 举一个例子,我们需要跟踪用户尝试登陆系统的操作。这里会把成功与不成功的尝试都记录下来。记录成功的使用"Info"日志级别,而不成功的使用"warn"级别。如果想查找所有不成功的登陆,我们可以利用linux的grep之类的命令工具,如下: +```Go # cat /data/logs/roll.log | grep "failed login" 2012-12-11 11:12:00 WARN : failed login attempt from 11.22.33.44 username password - +``` 通过这种方式我们就可以很方便的查找相应的信息,这样有利于我们针对应用日志做一些统计和分析。另外我们还需要考虑日志的大小,对于一个高流量的Web应用来说,日志的增长是相当可怕的,所以我们在seelog的配置文件里面设置了logrotate,这样就能保证日志文件不会因为不断变大而导致我们的磁盘空间不够引起问题。 ## 小结