Was ist ein idiomatischer Weg, Logging in Go durchzuführen?Wie wird die idiomatische Protokollierung in einer Go-Bibliothek implementiert?
Antwort
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.
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. –
@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
- 1. Wie wird die Abhängigkeitseigenschaft implementiert?
- 2. Wie wird die Laufzeitlizenzierung implementiert?
- 3. Wie wird die ausführliche Tensorflow-Protokollierung unterdrückt?
- 4. Wie wird die Großschreibung in nHibernate implementiert?
- 5. Wie wird die iOS-App-Protokollierung auf Remote-Server mit Fallback auf Offline-Protokoll implementiert?
- 6. Wie wird die Koppelnavigation beim Drehen implementiert?
- 7. Wie wird die http-Post-Methode implementiert?
- 8. Wie wird Serializable implementiert?
- 9. Wie wird die Save/Load-Funktionalität implementiert?
- 10. Wie wird pthread_join implementiert?
- 11. Wie wird die feste Seitenleiste korrekt implementiert?
- 12. Python-Protokollierung: Protokollierung setLevel() wird nicht erzwungen?
- 13. Wie wird die 'NSTableview Delegate' Methode implementiert?
- 14. Wie wird OpenID implementiert?
- 15. Wie wird set() implementiert?
- 16. Idiomatische Python-Protokollierung: Formatstring + Args-Liste vs. Inline-String-Formatierung - was wird bevorzugt?
- 17. Wie wird @private implementiert?
- 18. Wie wird __RTC_CheckEsp implementiert?
- 19. Wie wird die Java # intern() Methode implementiert?
- 20. Wie wird die ereignisgesteuerte Programmierung implementiert?
- 21. Wie wird die @ encode Compiler Direktive in Objective-C implementiert?
- 22. Wie wird das Sperren in einer Serverfarm implementiert?
- 23. Wie OpenID in Java implementiert wird
- 24. Wie wird die dauerhafte JVM-Funktion in Cake implementiert?
- 25. Wie generisches Objekt in Java implementiert wird, implementiert eine Schnittstelle
- 26. Wie wird die Vererbung in Screeps-Objekten implementiert?
- 27. Wie wird das Kudu WebJob Dashboard oder die Protokollierung zurückgesetzt?
- 28. Wie wird Chat normalerweise implementiert?
- 29. Wie wird Referenz intern implementiert?
- 30. Wie wird die Protokollierung für Test Stack White deaktiviert?
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. –