Application File Recorder
func main() {
app := iris.Default()
// Ghi vào tệp
// Tự động vô hiệu hóa màu sắc khi ghi vào tệp
f, _ := os.Create("iris.log")
app.Logger().SetOutput(f)
// Nếu bạn cần ghi nhật ký vào cả tệp và console, sử dụng mã sau
// app.Logger().AddOutput(os.Stdout)
app.Get("/ping", func(ctx iris.Context) {
ctx.WriteString("pong")
})
app.Listen(":8080")
}
Điều khiển màu sắc đầu ra nhật ký
Mặc định, đầu ra nhật ký trên bảng điều khiển sẽ được tô màu dựa trên TTY được phát hiện.
Tùy chỉnh tiêu đề cấp độ, văn bản, màu sắc và kiểu trong trường hợp thông thường.
Nhập golog
và pio
:
import (
"github.com/kataras/golog"
"github.com/kataras/pio"
// [...]
)
Lấy một cấp độ để tùy chỉnh, chẳng hạn như DebugLevel
:
level := golog.Levels[golog.DebugLevel]
Bạn hoàn toàn kiểm soát về văn bản, tiêu đề và kiểu của cấp độ:
// Tên cấp độ
// Tên viết thường sẽ được sử dụng
// để chuyển đổi chuỗi cấp độ thành loại cấp độ chính xác
Tên string
// Các Tên thay thế là các tên mà cấp độ nhật ký cụ thể này có thể được tham chiếu với
// như Tên = "warn"
// Các Tên thay thế = []string{"warning"}, đây là một trường tùy chọn,
// vì vậy chúng tôi giữ Tên là một chuỗi đơn giản và tạo trường mới này.
Các Tên thay thế []string
// Tiêu đề là tiền tố của cấp độ nhật ký
// Cũng có `ColorCode` và `Kiểu`.
// `ColorCode` và `Kiểu` nên nhất quán giữa các người viết.
Tiêu đề chuỗi
// Mã màu là màu cho `Tiêu đề`.
Mã màu int
// Kiểu là một hoặc nhiều tùy chọn phong phú cho `Tiêu đề`.
Kiểu []pio.RichOption
Mã ví dụ:
level := golog.Levels[golog.DebugLevel]
level.Tên = "gỡ lỗi" // mặc định
level.Tiêu đề = "[DBUG]" // mặc định
level.Mã màu = pio.Yellow // mặc định
Thay đổi định dạng đầu ra:
app.Logger().SetFormat("json", " ")
Đăng ký một định dạng tùy chỉnh:
app.Logger().RegisterFormatter(new(myFormatter))
Interface golog.Formatter như sau:
// Định dạng là người chịu trách nhiệm in nhật ký vào writer của bộ ghi nhật ký.
type Định dạng giao diện {
// Tên của định dạng.
Chuỗi() chuỗi
// Đặt bất kỳ tùy chọn nào và trả về đối tượng đã nhân bản, nếu phổ biến. Xem `Logger.SetFormat`.
Tùy chọn(opts ...interface{}) Định dạng
// Ghi "nhật ký" vào "dest" logger.
Định dạng(dest io.Writer, nhật ký *Nhật ký) bool
}
Thay đổi đầu ra và định dạng theo cấp độ:
app.Logger().SetLevelOutput("error", os.Stderr)
app.Logger().SetLevelFormat("json")
Ghi log yêu cầu
Bộ ghi log ứng dụng chúng ta đã thấy ở trên chủ yếu được sử dụng để ghi thông tin và lỗi liên quan đến ứng dụng. Trong khi đó, bộ ghi log truy cập chúng ta thấy ở dưới chủ yếu được sử dụng để ghi lại các yêu cầu và phản hồi HTTP đến.
package main
import (
"os"
"github.com/kataras/iris/v12"
"github.com/kataras/iris/v12/middleware/accesslog"
)
// Đọc ví dụ và nhận xét của nó một cách cẩn thận.
func makeAccessLog() *accesslog.AccessLog {
// Khởi tạo một middleware ghi log truy cập mới.
ac := accesslog.File("./access.log")
// Xóa dòng này để vô hiệu hóa việc ghi log ra console:
ac.AddOutput(os.Stdout)
// Cấu hình mặc định:
ac.Delim = '|'
ac.TimeFormat = "2006-01-02 15:04:05"
ac.Async = false
ac.IP = true
ac.BytesReceivedBody = true
ac.BytesSentBody = true
ac.BytesReceived = false
ac.BytesSent = false
ac.BodyMinify = true
ac.RequestBody = true
ac.ResponseBody = false
ac.KeepMultiLineError = true
ac.PanicLog = accesslog.LogHandler
// Sử dụng định dạng dòng mặc định nếu trình định dạng bị thiếu:
// Thời gian|Trễ|Trạng thái|Phương pháp|Đường dẫn|IP|Tham số Truy vấn Đường dẫn|Dữ liệu Nhận được|Dữ liệu Gửi đi|Yêu cầu|Phản hồi|
//
// Đặt một trình định dạng tùy chỉnh:
ac.SetFormatter(&accesslog.JSON{
Indent: " ",
HumanTime: true,
})
// ac.SetFormatter(&accesslog.CSV{})
// ac.SetFormatter(&accesslog.Template{Text: "{{.Code}}"})
return ac
}
func main() {
ac := makeAccessLog()
defer ac.Close() // Đóng tệp.
app := iris.New()
// Đăng ký middleware (sử dụng UseRouter cũng có thể bắt lỗi HTTP).
app.UseRouter(ac.Handler)
app.Get("/", indexHandler)
app.Listen(":8080")
}
func indexHandler(ctx iris.Context) {
ctx.WriteString("OK")
}
Đọc thêm ví dụ tại đây: _examples/logging/request-logger.