2012-11-21 2 views
9

Was ist ein idiomatischer Weg, Logging in Go durchzuführen?Wie wird die idiomatische Protokollierung in einer Go-Bibliothek implementiert?

+0

Es gibt eine Reihe von Bibliotheken von Drittanbietern, die mehr vollständige Implementierungen bieten. Zum Beispiel, in der Standard-Bibliothek verpasste ich eine bequeme Option für benutzerdefinierte Formatierung und Protokollebenen (Debug, Info, ...) und ich am Ende implementieren meine eigene Bibliothek - [go-log] (https://github.com/scale -ich/go-log). Schau es dir an. –

Antwort

11

Erstellen Sie eine Datei, die eine globale Variable deklariert Logger. Verwenden Sie dann die idiomatische init()-Funktion von Go, um die Variable beim Start zu initialisieren.

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") 
} 

Dieses Verfahren bietet den Vorteil, dass Sie eine einzelne Logger Implementierung verwenden können, die von einem einzigen konfiguriert werden können Datei.

EDIT: ThomasKappler wies darauf hin, dass wenn Sie nur einen einzigen globalen Logger verwenden, können Sie den eingebauten Logger des Log-Pakets verwenden und konfigurieren Sie es mit SetFlags. Der einzige Unterschied besteht darin, dass Sie expliziter sein und das Protokollpaket importieren müssen.

+11

Wenn Sie nur einen globalen Logger verwenden, können Sie Ihre eigenen überspringen und die Funktionen des Log-Pakets wie log.Println usw. verwenden. Sie können es weiterhin mit log.SetFlags() konfigurieren. –

+0

@ThomasKappler Danke, das wusste ich nicht. Ich bevorzuge diese Methode, weil ich den Logger erweitern kann, ohne die bestehende Funktionalität zu zerstören (außerdem muss ich das Log-Paket nicht überall importieren) – liamzebedee

Verwandte Themen