Skip to content

Commit 172f32e

Browse files
committed
Format and remove 12.1.md spaces
1 parent 81e1aa2 commit 172f32e

File tree

1 file changed

+129
-129
lines changed

1 file changed

+129
-129
lines changed

zh/12.1.md

+129-129
Original file line numberDiff line numberDiff line change
@@ -7,73 +7,73 @@ logrus是用Go语言实现的一个日志系统,与标准库log完全兼容并
77
首先安装logrus
88
```Go
99

10-
go get -u github.com/sirupsen/logrus
10+
go get -u github.com/sirupsen/logrus
1111

1212
```
1313

1414
简单例子:
1515

1616
```Go
1717

18-
package main
18+
package main
1919

20-
import (
21-
log "github.com/Sirupsen/logrus"
22-
)
20+
import (
21+
log "github.com/Sirupsen/logrus"
22+
)
2323

24-
func main() {
25-
log.WithFields(log.Fields{
26-
"animal": "walrus",
27-
}).Info("A walrus appears")
28-
}
24+
func main() {
25+
log.WithFields(log.Fields{
26+
"animal": "walrus",
27+
}).Info("A walrus appears")
28+
}
2929
```
3030
### 基于logrus的自定义日志处理
3131
```Go
3232

33-
package main
33+
package main
3434

35-
import (
36-
log "github.com/Sirupsen/logrus"
37-
"os"
38-
)
35+
import (
36+
log "github.com/Sirupsen/logrus"
37+
"os"
38+
)
3939

40-
func init() {
41-
// 日志格式化为JSON而不是默认的ASCII
42-
log.SetFormatter(&log.JSONFormatter{})
40+
func init() {
41+
// 日志格式化为JSON而不是默认的ASCII
42+
log.SetFormatter(&log.JSONFormatter{})
4343

44-
// 输出stdout而不是默认的stderr,也可以是一个文件
45-
log.SetOutput(os.Stdout)
44+
// 输出stdout而不是默认的stderr,也可以是一个文件
45+
log.SetOutput(os.Stdout)
4646

47-
// 只记录严重或以上警告
48-
log.SetLevel(log.WarnLevel)
49-
}
47+
// 只记录严重或以上警告
48+
log.SetLevel(log.WarnLevel)
49+
}
5050

51-
func main() {
52-
log.WithFields(log.Fields{
53-
"animal": "walrus",
54-
"size": 10,
55-
}).Info("A group of walrus emerges from the ocean")
56-
57-
log.WithFields(log.Fields{
58-
"omg": true,
59-
"number": 122,
60-
}).Warn("The group's number increased tremendously!")
61-
62-
log.WithFields(log.Fields{
63-
"omg": true,
64-
"number": 100,
65-
}).Fatal("The ice breaks!")
66-
67-
// 通过日志语句重用字段
68-
// logrus.Entry返回自WithFields()
69-
contextLogger := log.WithFields(log.Fields{
70-
"common": "this is a common field",
71-
"other": "I also should be logged always",
72-
})
73-
74-
contextLogger.Info("I'll be logged with common and other field")
75-
contextLogger.Info("Me too")
76-
}
51+
func main() {
52+
log.WithFields(log.Fields{
53+
"animal": "walrus",
54+
"size": 10,
55+
}).Info("A group of walrus emerges from the ocean")
56+
57+
log.WithFields(log.Fields{
58+
"omg": true,
59+
"number": 122,
60+
}).Warn("The group's number increased tremendously!")
61+
62+
log.WithFields(log.Fields{
63+
"omg": true,
64+
"number": 100,
65+
}).Fatal("The ice breaks!")
66+
67+
// 通过日志语句重用字段
68+
// logrus.Entry返回自WithFields()
69+
contextLogger := log.WithFields(log.Fields{
70+
"common": "this is a common field",
71+
"other": "I also should be logged always",
72+
})
73+
74+
contextLogger.Info("I'll be logged with common and other field")
75+
contextLogger.Info("Me too")
76+
}
7777
```
7878

7979
## seelog介绍
@@ -95,20 +95,20 @@ seelog是用Go语言实现的一个日志系统,它提供了一些简单的函
9595
首先安装seelog
9696
```Go
9797

98-
go get -u github.com/cihub/seelog
98+
go get -u github.com/cihub/seelog
9999

100100
```
101101
然后我们来看一个简单的例子:
102102
```Go
103103

104-
package main
104+
package main
105105

106-
import log "github.com/cihub/seelog"
106+
import log "github.com/cihub/seelog"
107107

108-
func main() {
109-
defer log.Flush()
110-
log.Info("Hello from Seelog!")
111-
}
108+
func main() {
109+
defer log.Flush()
110+
log.Info("Hello from Seelog!")
111+
}
112112

113113
```
114114
编译后运行如果出现了`Hello from seelog`,说明seelog日志系统已经成功安装并且可以正常运行了。
@@ -117,59 +117,59 @@ seelog是用Go语言实现的一个日志系统,它提供了一些简单的函
117117
seelog支持自定义日志处理,下面是我基于它自定义的日志处理包的部分内容:
118118
```Go
119119

120-
package logs
121-
122-
import (
123-
// "errors"
124-
"fmt"
125-
seelog "github.com/cihub/seelog"
126-
// "io"
127-
)
128-
129-
var Logger seelog.LoggerInterface
130-
131-
func loadAppConfig() {
132-
appConfig := `
133-
<seelog minlevel="warn">
134-
<outputs formatid="common">
135-
<rollingfile type="size" filename="/data/logs/roll.log" maxsize="100000" maxrolls="5"/>
136-
<filter levels="critical">
137-
<file path="/data/logs/critical.log" formatid="critical"/>
138-
<smtp formatid="criticalemail" senderaddress="[email protected]" sendername="ShortUrl API" hostname="smtp.gmail.com" hostport="587" username="mailusername" password="mailpassword">
139-
<recipient address="[email protected]"/>
140-
</smtp>
141-
</filter>
142-
</outputs>
143-
<formats>
144-
<format id="common" format="%Date/%Time [%LEV] %Msg%n" />
145-
<format id="critical" format="%File %FullPath %Func %Msg%n" />
146-
<format id="criticalemail" format="Critical error on our server!\n %Time %Date %RelFile %Func %Msg \nSent by Seelog"/>
147-
</formats>
148-
</seelog>
149-
`
150-
logger, err := seelog.LoggerFromConfigAsBytes([]byte(appConfig))
151-
if err != nil {
152-
fmt.Println(err)
153-
return
154-
}
155-
UseLogger(logger)
156-
}
157-
158-
func init() {
159-
DisableLog()
160-
loadAppConfig()
161-
}
162-
163-
// DisableLog disables all library log output
164-
func DisableLog() {
165-
Logger = seelog.Disabled
166-
}
167-
168-
// UseLogger uses a specified seelog.LoggerInterface to output library log.
169-
// Use this func if you are using Seelog logging system in your app.
170-
func UseLogger(newLogger seelog.LoggerInterface) {
171-
Logger = newLogger
120+
package logs
121+
122+
import (
123+
// "errors"
124+
"fmt"
125+
seelog "github.com/cihub/seelog"
126+
// "io"
127+
)
128+
129+
var Logger seelog.LoggerInterface
130+
131+
func loadAppConfig() {
132+
appConfig := `
133+
<seelog minlevel="warn">
134+
<outputs formatid="common">
135+
<rollingfile type="size" filename="/data/logs/roll.log" maxsize="100000" maxrolls="5"/>
136+
<filter levels="critical">
137+
<file path="/data/logs/critical.log" formatid="critical"/>
138+
<smtp formatid="criticalemail" senderaddress="[email protected]" sendername="ShortUrl API" hostname="smtp.gmail.com" hostport="587" username="mailusername" password="mailpassword">
139+
<recipient address="[email protected]"/>
140+
</smtp>
141+
</filter>
142+
</outputs>
143+
<formats>
144+
<format id="common" format="%Date/%Time [%LEV] %Msg%n" />
145+
<format id="critical" format="%File %FullPath %Func %Msg%n" />
146+
<format id="criticalemail" format="Critical error on our server!\n %Time %Date %RelFile %Func %Msg \nSent by Seelog"/>
147+
</formats>
148+
</seelog>
149+
`
150+
logger, err := seelog.LoggerFromConfigAsBytes([]byte(appConfig))
151+
if err != nil {
152+
fmt.Println(err)
153+
return
172154
}
155+
UseLogger(logger)
156+
}
157+
158+
func init() {
159+
DisableLog()
160+
loadAppConfig()
161+
}
162+
163+
// DisableLog disables all library log output
164+
func DisableLog() {
165+
Logger = seelog.Disabled
166+
}
167+
168+
// UseLogger uses a specified seelog.LoggerInterface to output library log.
169+
// Use this func if you are using Seelog logging system in your app.
170+
func UseLogger(newLogger seelog.LoggerInterface) {
171+
Logger = newLogger
172+
}
173173
```
174174
上面主要实现了三个函数,
175175

@@ -198,36 +198,36 @@ seelog支持自定义日志处理,下面是我基于它自定义的日志处
198198
上面我们定义了一个自定义的日志处理包,下面就是使用示例:
199199
```Go
200200

201-
package main
202-
203-
import (
204-
"net/http"
205-
"project/logs"
206-
"project/configs"
207-
"project/routes"
208-
)
209-
210-
func main() {
211-
addr, _ := configs.MainConfig.String("server", "addr")
212-
logs.Logger.Info("Start server at:%v", addr)
213-
err := http.ListenAndServe(addr, routes.NewMux())
214-
logs.Logger.Critical("Server err:%v", err)
215-
}
201+
package main
202+
203+
import (
204+
"net/http"
205+
"project/logs"
206+
"project/configs"
207+
"project/routes"
208+
)
209+
210+
func main() {
211+
addr, _ := configs.MainConfig.String("server", "addr")
212+
logs.Logger.Info("Start server at:%v", addr)
213+
err := http.ListenAndServe(addr, routes.NewMux())
214+
logs.Logger.Critical("Server err:%v", err)
215+
}
216216
```
217217
## 发生错误发送邮件
218218
上面的例子解释了如何设置发送邮件,我们通过如下的smtp配置用来发送邮件:
219219
```html
220220

221-
<smtp formatid="criticalemail" senderaddress="[email protected]" sendername="ShortUrl API" hostname="smtp.gmail.com" hostport="587" username="mailusername" password="mailpassword">
222-
<recipient address="[email protected]"/>
223-
</smtp>
221+
<smtp formatid="criticalemail" senderaddress="[email protected]" sendername="ShortUrl API" hostname="smtp.gmail.com" hostport="587" username="mailusername" password="mailpassword">
222+
<recipient address="[email protected]"/>
223+
</smtp>
224224
```
225225
邮件的格式通过criticalemail配置,然后通过其他的配置发送邮件服务器的配置,通过recipient配置接收邮件的用户,如果有多个用户可以再添加一行。
226226

227227
要测试这个代码是否正常工作,可以在代码中增加类似下面的一个假消息。不过记住过后要把它删除,否则上线之后就会收到很多垃圾邮件。
228228
```Go
229229

230-
logs.Logger.Critical("test Critical message")
230+
logs.Logger.Critical("test Critical message")
231231
```
232232
现在,只要我们的应用在线上记录一个Critical的信息,你的邮箱就会收到一个Email,这样一旦线上的系统出现问题,你就能立马通过邮件获知,就能及时的进行处理。
233233
## 使用应用日志
@@ -236,8 +236,8 @@ seelog支持自定义日志处理,下面是我基于它自定义的日志处
236236
举一个例子,我们需要跟踪用户尝试登陆系统的操作。这里会把成功与不成功的尝试都记录下来。记录成功的使用"Info"日志级别,而不成功的使用"warn"级别。如果想查找所有不成功的登陆,我们可以利用linux的grep之类的命令工具,如下:
237237
```Go
238238

239-
# cat /data/logs/roll.log | grep "failed login"
240-
2012-12-11 11:12:00 WARN : failed login attempt from 11.22.33.44 username password
239+
# cat /data/logs/roll.log | grep "failed login"
240+
2012-12-11 11:12:00 WARN : failed login attempt from 11.22.33.44 username password
241241
```
242242
通过这种方式我们就可以很方便的查找相应的信息,这样有利于我们针对应用日志做一些统计和分析。另外我们还需要考虑日志的大小,对于一个高流量的Web应用来说,日志的增长是相当可怕的,所以我们在seelog的配置文件里面设置了logrotate,这样就能保证日志文件不会因为不断变大而导致我们的磁盘空间不够引起问题。
243243

0 commit comments

Comments
 (0)