Qual è un modo idiomatico per eseguire l'accesso a Go?Come implementare la registrazione idiomatica in una libreria Go?
risposta
Creare un file che dichiari una variabile globale logger. Quindi, utilizzare la funzione idiomatica init() di Vai per inizializzare la variabile all'avvio.
logger.go:
package xxx
import (
"log"
"os"
)
var logger *log.Logger
func init() {
logger = log.New(os.Stderr, "xxx: ", log.Ldate | log.Ltime | log.Lshortfile)
}
example.go:
func test() {
logger.Println("Logged")
}
Questo metodo offre il vantaggio che è possibile utilizzare una singola implementazione logger che può essere configurato da un singolo file.
EDIT: ThomasKappler ha sottolineato che se si utilizza solo un singolo logger globale, è possibile utilizzare logger integrato del pacchetto di log e configurarlo con SetFlags. L'unica differenza è che devi essere più esplicito e importare il pacchetto di log.
Se si utilizza un solo logger globale, è possibile saltare il proprio ed utilizzare le funzioni del pacchetto di log come log.Println ecc. È comunque possibile configurarlo con log.SetFlags(). –
@ThomasKappler Grazie, non lo sapevo. Preferisco usare questo metodo perché posso estendere il logger senza rompere le funzionalità esistenti (in più non devo importare il pacchetto di log ovunque) – liamzebedee
C'è un mucchio di librerie di terze parti che fornisce più funzionalità complete di implementazione. Ad esempio, nella libreria standard ho perso un'opzione utile per la formattazione personalizzata e livelli di registro (debug, informazioni, ...) e alla fine ho implementato la mia libreria personale - [go-log] (https://github.com/scale -E/go-log). Dai un'occhiata a questo. –