2012-11-21 14 views
9

Qual è un modo idiomatico per eseguire l'accesso a Go?Come implementare la registrazione idiomatica in una libreria Go?

+0

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. –

risposta

11

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.

+11

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(). –

+0

@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

Problemi correlati