Applicazione File Recorder
func main() {
app := iris.Default()
// Registra su un file
// Disabilita automaticamente i colori durante la scrittura su un file
f, _ := os.Create("iris.log")
app.Logger().SetOutput(f)
// Se è necessario scrivere i log sia su un file che sulla console, utilizzare il codice seguente
// app.Logger().AddOutput(os.Stdout)
app.Get("/ping", func(ctx iris.Context) {
ctx.WriteString("pong")
})
app.Listen(":8080")
}
Controllo del colore dell'output del Log
Per impostazione predefinita, l'output del log sulla console verrà colorato in base al TTY rilevato.
Personalizza i titoli, il testo, il colore e lo stile dei livelli in casi regolari.
Importa golog
e pio
:
import (
"github.com/kataras/golog"
"github.com/kataras/pio"
// [...]
)
Ottieni un livello da personalizzare, come DebugLevel
:
livello := golog.Levels[golog.DebugLevel]
Hai completo controllo sul testo, titolo e stile del livello:
// Nome del livello
// I nomi in minuscolo verranno utilizzati
// per convertire la stringa del livello nel tipo di livello corretto
Nome string
// I nomi alternativi sono i nomi con cui questo livello di log specifico potrebbe essere fatto riferimento
// ad esempio, Nome = "warning"
// AlternativeNames = []string{"warning"}, questo è un campo facoltativo,
// quindi manteniamo il Nome come stringa semplice e creiamo questo nuovo campo.
AlternativeNames []string
// Titolo è il prefisso del livello di log.
// Ci sono anche `ColorCode` e `Style`.
// `ColorCode` e `Style` dovrebbero essere coerenti tra i writer.
Titolo string
// ColorCode è il colore per `Titolo`.
ColorCode int
// Style è una o più opzioni avanzate per `Titolo`.
Style []pio.RichOption
Codice di esempio:
livello := golog.Levels[golog.DebugLevel]
livello.Nome = "debug" // predefinito
livello.Titolo = "[DBUG]" // predefinito
livello.ColorCode = pio.Yellow // predefinito
Cambia il formato dell'output:
app.Logger().SetFormat("json", " ")
Registra un formatter personalizzato:
app.Logger().RegisterFormatter(new(myFormatter))
L'interfaccia golog.Formatter è la seguente:
// Il Formatter è responsabile della stampa di un log su un writer del logger.
type Formatter interface {
// Il nome del formatter.
String() string
// Imposta eventuali opzioni e restituisce un oggetto clonato, se comune. Vedi `Logger.SetFormat`.
Options(opts ...interface{}) Formatter
// Scrive il "log" sul "dest" logger.
Format(dest io.Writer, log *Log) bool
}
Modifica output e formato per livello:
app.Logger().SetLevelOutput("error", os.Stderr)
app.Logger().SetLevelFormat("json")
Registrazione delle richieste
Il registro dell'applicazione che abbiamo visto sopra è principalmente utilizzato per registrare informazioni e errori relativi all'applicazione. D'altra parte, il registro degli accessi che vediamo di seguito è principalmente utilizzato per registrare le richieste e le risposte HTTP in arrivo.
package main
import (
"os"
"github.com/kataras/iris/v12"
"github.com/kataras/iris/v12/middleware/accesslog"
)
// Leggere attentamente l'esempio e i relativi commenti.
func makeAccessLog() *accesslog.AccessLog {
// Inizializza un nuovo middleware di registro degli accessi.
ac := accesslog.File("./access.log")
// Rimuovere questa riga per disabilitare la registrazione sulla console:
ac.AddOutput(os.Stdout)
// Configurazione predefinita:
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
// Utilizzare il formato di riga predefinito se il formatter è mancante:
// Time|Delay|Status|Method|Path|IP|Parametri di query del percorso|Bytes ricevuti|Bytes inviati|Richiesta|Risposta|
//
// Imposta un formatter personalizzato:
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() // Chiudi il file.
app := iris.New()
// Registra il middleware (usando UseRouter è possibile intercettare anche gli errori HTTP).
app.UseRouter(ac.Handler)
app.Get("/", indexHandler)
app.Listen(":8080")
}
func indexHandler(ctx iris.Context) {
ctx.WriteString("OK")
}
Leggi altri esempi qui: _examples/logging/request-logger.