Uygulama Dosyası Kaydedici
func main() {
app := iris.Default()
// Dosyaya kayıt
// Dosyaya yazarken renkleri otomatik olarak devre dışı bırak
f, _ := os.Create("iris.log")
app.Logger().SetOutput(f)
// Eğer logları hem dosyaya hem de konsola yazmanız gerekiyorsa, aşağıdaki kodu kullanın
// app.Logger().AddOutput(os.Stdout)
app.Get("/ping", func(ctx iris.Context) {
ctx.WriteString("pong")
})
app.Listen(":8080")
}
Log Çıkış Rengini Kontrol Et
Varsayılan olarak, konsoldaki log çıktısı algılanan TTY'ye göre renklendirilir.
Normal durumlarda seviye başlıklarını, metni, rengi ve stili özelleştirin.
golog
ve pio
'yı içe aktarın:
import (
"github.com/kataras/golog"
"github.com/kataras/pio"
// [...]
)
DebugLevel
gibi özelleştirmek için bir seviye alın:
level := golog.Levels[golog.DebugLevel]
Seviyenin metni, başlığı ve stil üzerinde tam kontrolünüz vardır:
// Seviye adı
// Küçük harfli adlar, string seviyeyi doğru seviye türüne dönüştürmek için kullanılacaktır
Name string
// Bu belirli log seviyesine başvurulabilecek alternatif adlar
// örneğin Name = "uyarı"
// AlternativeNames = []string{"warning"}, bu isteğe bağlı bir alandır,
// bu yüzden Name'i basit bir dize olarak tutuyoruz ve bu yeni alanı oluşturuyoruz.
AlternativeNames []string
// Başlık, log seviyesinin öneki.
// Ayrıca `ColorCode` ve `Style` bulunmaktadır.
// `ColorCode` ve `Style` writerlar arasında tutarlı olmalıdır.
Title string
// `Title` için renk.
ColorCode int
// `Title` için bir veya daha fazla seçenek.
Style []pio.RichOption
Örnek kod:
level := golog.Levels[golog.DebugLevel]
level.Name = "debug" // varsayılan
level.Title = "[DBUG]" // varsayılan
level.ColorCode = pio.Yellow // varsayılan
Çıktı formatını değiştir:
app.Logger().SetFormat("json", " ")
Özel bir biçimlendirici kaydettirin:
app.Logger().RegisterFormatter(new(myFormatter))
golog.Formatter arayüzü aşağıdaki gibi:
// Formatter, logu logger'ın bir yazıcısına yazdırmaktan sorumludur.
type Formatter interface {
// Biçimlendiricinin adı.
String() string
// Ortak olduğunda herhangi bir seçeneği ayarlayın ve klonlanmış bir nesne döndürün. `Logger.SetFormat`e bakın.
Options(opts ...interface{}) Formatter
// "logu" "dest" logger'ına yazılır.
Format(dest io.Writer, log *Log) bool
}
Seviyeye göre çıktı ve formatı değiştirin:
app.Logger().SetLevelOutput("error", os.Stderr)
app.Logger().SetLevelFormat("json")
İstek Kaydı
Yukarıda gördüğümüz uygulama günlüğü, uygulamayla ilgili bilgileri ve hataları kaydetmek için kullanılır. Diğer yandan, aşağıda gördüğümüz erişim günlüğü, gelen HTTP isteklerini ve yanıtlarını kaydetmek için kullanılır.
package main
import (
"os"
"github.com/kataras/iris/v12"
"github.com/kataras/iris/v12/middleware/accesslog"
)
// Örneği ve yorumlarını dikkatlice okuyun.
func makeAccessLog() *accesslog.AccessLog {
// Yeni bir erişim günlüğü ara yazılımını başlatın.
ac := accesslog.File("./access.log")
// Konsola günlüğe kayıt etmeyi devre dışı bırakmak için bu satırı kaldırın:
ac.AddOutput(os.Stdout)
// Varsayılan yapılandırma:
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
// Eğer biçimleyici eksikse varsayılan satır biçimini kullanın:
// Zaman|Gecikme|Durum|Metot|Yol|IP|Yol Sorgu Parametreleri|Alınan Baytlar|Gönderilen Baytlar|İstek|Yanıt|
//
// Özel bir biçimleyici belirtin:
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() // Dosyayı kapat.
app := iris.New()
// Ara yazılımı kaydettirin (HTTP hatalarını da yakalayabilirsiniz).
app.UseRouter(ac.Handler)
app.Get("/", indexHandler)
app.Listen(":8080")
}
func indexHandler(ctx iris.Context) {
ctx.WriteString("OK")
}
Daha fazla örneği buradan inceleyebilirsiniz: _examples/logging/request-logger.