Go Echo 学习笔记(四)自定义组件
Echo 自定义组件
Echo 做为一个性能强大的 web 框架提供了非常丰富的自定义组件功能。
自定义日志信息
Echo 支付设置项目的调试信息是否进行显示:
e.Debug = true // 开启调试模式
e.Debug = false // 关闭调试模式
同时可以利用 Echo 中的 Logger 结构体实现对调试信息的定制:
默认的日志的显示格式为json,只会显示 time、level、prefix、file、line
等信息:
{"time":"${time_rfc3339_nano}","level":"${level}","prefix":"${prefix}","file":"${short_file}","line":"${line}"}
可以利用 Echo#Logger.SetHeader(string) 方法来定制显示内容:
// .(*log.Logger)为接口类型断言,用来判断接口的类型
if l, ok := e.Logger.(*log.Logger); ok {
l.SetHeader("${time_rfc3339} ${level}")
}
可以支持定制的类型有:
time_rfc3339
time_rfc3339_nano
level
prefix
long_file
short_file
line
Echo 中的日志信息的默认输出是 os.Stdout
(标准输出),可以通过 Echo#Logger.SetOutput(io.Writer)
来指定相应的输出位置。例如可以将日志输出到文件以及对应的标准输出中:
logFile, err := os.OpenFile("./log/echo.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0755)
if err != nil {
panic(err)
}
// 设置日志输出位置(文件以及终端)
e.Logger.SetOutput(io.MultiWriter(logFile, os.Stdout))
Echo 中默认的日志级别是 Error
,可以通过 Echo#Logger.SetLevel(log.Lvl)
传入对应的日志级别(从低到高)来进行设置:
OFF
DEBUG
INFO
WARN
ERROR
自定义服务
Echo 使用 Echo#Start(addr string)
传入一个应用的路径(端口号)来启动一个 Web App,想要对 App Serevr 进行一些相应的定制就是需要使用 Echo#StartServer(server *http.Server)
传入一个 http.Server 对象来启动 App,在 http.Server 对象中完成 Server 的定制需求。
s := &http.Server{
Addr: ":1323",
ReadTimeout: 20 * time.Minute,
WriteTimeout: 20 * time.Minute,
}
e.Logger.Fatal(e.StartServer(s))
其中,支持自定义如下的内容:
HTTP/2 Cleartext Server
Echo#StartH2CServer(server *http.Server)
方法支持启动一个 HTTP2 的明文 Server App:
s := &http2.Server{
MaxConcurrentStreams: 250,
MaxReadFrameSize: 1048576,
IdleTimeout: 10 * time.Second,
}
e.Logger.Fatal(e.StartH2CServer(":1323", s))
Startup Banner
Startup Banner 控制 Echo App 在启动的时候所显示的内容,默认的显示内容如下:
____ __
/ __/___/ / ___
/ _// __/ _ \/ _ \
/___/\__/_//_/\___/ v4.2.2
High performance, minimalist Go web framework
https://echo.labstack.com
可以通过 Echo#HideBanner
来隐藏该显示信息。
e.HideBanner = true // 关闭启动信息显示
Listener
Echo支持使用 Echo#*Listener
方法来修改当前 App 所使用的 Listener:
l, err := net.Listen("tcp", ":1323")
if err != nil {
e.Logger.Fatal(err)
}
e.Listener = l
e.Logger.Fatal(e.Start(""))
HTTP/2
Echo 可以通过Echo#DisableHTTP2
来禁用:
e.DisableHTTP2 = true // 禁用http2协议
Read&Write Timeout
在自定义 Echo Server 的时候可以对请求以及响应的超市时间进行设置:
Echo#*Server#ReadTimeout
:设置读取请求的最长时间;Echo#*Server#WriteTimeout:设置写入响应的最长时间。
server := &http.Server{
ReadTimeout: 60*time.Second,
WriteTimeout: 60*time.Second,
}
e.Logger.Fatal(e.StartServer(server))
Validator
Echo#Validator
注册一个用于请求数据的验证器,用来对请求的数据进行有效性验证。
Binder
Echo#Binder
注册一个用于绑定请求有效负载的自定义绑定程序。
Renderer
Echo#Renderer
注册一个用于模板渲染的渲染引擎。
HTTP Error Handler
Echo#HTTPErrorHandler
注册一个自定义的 http 错误处理方法。