Anwendungsdatei Recorder
func main() {
app := iris.Default()
// In eine Datei aufzeichnen
// Automatisch Farben deaktivieren beim Schreiben in eine Datei
f, _ := os.Create("iris.log")
app.Logger().SetOutput(f)
// Wenn Sie Protokolle sowohl in eine Datei als auch in die Konsole schreiben möchten, verwenden Sie den folgenden Code
// app.Logger().AddOutput(os.Stdout)
app.Get("/ping", func(ctx iris.Context) {
ctx.WriteString("pong")
})
app.Listen(":8080")
}
Steuern der Protokollausgabe Farbe
Standardmäßig wird die Protokollausgabe auf der Konsole je nach erkanntem TTY farbig dargestellt.
Passen Sie die Level-Titel, Text, Farbe und Stil in regulären Fällen an.
Importieren von golog
und pio
:
import (
"github.com/kataras/golog"
"github.com/kataras/pio"
// [...]
)
Holen Sie sich ein Level zur Anpassung, wie z.B. DebugLevel
:
level := golog.Levels[golog.DebugLevel]
Sie haben die vollständige Kontrolle über den Text, den Titel und den Stil des Levels:
// Level-Name
// Kleinbuchstabennamen werden verwendet,
// um den Zeichenfolgen-Level in den richtigen Level-Typ zu konvertieren.
Name string
// Alternative Namen sind die Namen, mit denen auf diesen bestimmten Protokoll-Level verwiesen werden kann,
// z.B. Name = "warn"
// Alternative Namen = []string{"warning"}, dies ist ein optionales Feld,
// deshalb behalten wir den Namen als einfachen String bei und erstellen dieses neue Feld.
AlternativeNames []string
// Titel ist das Präfix des Protokoll-Levels.
// Es gibt auch `ColorCode` und `Style`.
// `ColorCode` und `Style` sollten zwischen Schreibern konsistent sein.
Title string
// ColorCode ist die Farbe für `Titel`.
ColorCode int
// Stil ist eine oder mehrere Formatierungsoptionen für `Titel`.
Style []pio.RichOption
Beispielcode:
level := golog.Levels[golog.DebugLevel]
level.Name = "debug" // Standard
level.Title = "[DBUG]" // Standard
level.ColorCode = pio.Yellow // Standard
Ändern des Ausgabeformats:
app.Logger().SetFormat("json", " ")
Registrieren eines benutzerdefinierten Formatters:
app.Logger().RegisterFormatter(new(myFormatter))
Das golog.Formatter-Schnittstellen ist wie folgt:
// Formatter ist dafür verantwortlich, ein Protokoll in einen Writer des Loggers zu schreiben.
type Formatter interface {
// Der Name des Formatters.
String() string
// Setze beliebige Optionen und gib ein geklontes Objekt zurück, falls vorhanden. Siehe `Logger.SetFormat`.
Options(opts ...interface{}) Formatter
// Schreibt das "Protokoll" in den "Ziel" Logger.
Format(dest io.Writer, log *Log) bool
}
Ändern von Ausgabe und Format nach Level:
app.Logger().SetLevelOutput("error", os.Stderr)
app.Logger().SetLevelFormat("json")
Anforderungsprotokollierung
Der oben beschriebene Anwendungslogger wird hauptsächlich zum Protokollieren von Informationen und Fehlern im Zusammenhang mit der Anwendung verwendet. Andererseits wird der unten gezeigte Zugriffslogger hauptsächlich verwendet, um eingehende HTTP-Anfragen und -Antworten zu protokollieren.
package main
import (
"os"
"github.com/kataras/iris/v12"
"github.com/kataras/iris/v12/middleware/accesslog"
)
// Lesen Sie das Beispiel und seine Kommentare sorgfältig durch.
func makeAccessLog() *accesslog.AccessLog {
// Initialisieren eines neuen Zugriffsprotokoll-Middleware.
ac := accesslog.File("./access.log")
// Entfernen Sie diese Zeile, um das Protokollieren in der Konsole zu deaktivieren:
ac.AddOutput(os.Stdout)
// Standardkonfiguration:
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
// Verwenden Sie ein Standardzeilenformat, wenn der Formatter fehlt:
// Zeit|Verzögerung|Status|Methode|Pfad|IP|Pfad Abfrageparameter|Empfangene Bytes|Gesendete Bytes|Anforderung|Antwort|
//
// Setzen Sie einen benutzerdefinierten Formatter:
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() // Schließen Sie die Datei.
app := iris.New()
// Middleware registrieren (auch HTTP-Fehler mit UseRouter abfangen).
app.UseRouter(ac.Handler)
app.Get("/", indexHandler)
app.Listen(":8080")
}
func indexHandler(ctx iris.Context) {
ctx.WriteString("OK")
}
Weitere Beispiele finden Sie hier: _examples/logging/request-logger.