2016-04-10 12 views
0

Wir verwenden eine Drittanbieter-Bibliothek, die *log.Logger (StdLib Logger) als Parameter in seiner neuen Funktion akzeptiert, aber wir implementieren Logger von uns selbst. Es hat die gleiche "Schnittstelle" mit dem stdlib Logger.Golang Logger Polymorphismus?

Gibt es einen Hack Weg, um unsere eigene Implementierung von Logger in der dritten Bibliothek übergibt mit Ausnahme der Bibliothek Eigentümer fragen den Parametertyp zu ändern, um eine Schnittstelle?

Antwort

1

Wenn ihr Paket einen tatsächlichen nimmt * log.Logger, gibt es nichts Sie können tun, um Ihren eigenen Logger zu injizieren, außer die Ausgabe eines log.Loggers auf einen benutzerdefinierten Writer zu setzen, wo Sie ihre Log-Anweisungen abfangen und sie dann erneut über Ihre Log-Logs protokollieren.

Aber das wird sub-genial sein, da Sie im Grunde alle ihre Protokollanweisungen analysieren würden, nur damit Sie neu anmelden können. Nicht sicher, ob log.Logger eine Protokollnachricht als einen Aufruf an Write schreibt. Wenn dies der Fall ist, ist es einfach, da Sie sich nur bei jedem Aufruf von Write erneut anmelden.

Sie könnten auch in Betracht ziehen, eine andere Bibliothek zu finden oder diese Bibliothek zu erweitern und zu ändern, da nichts wirklich von log.Logger abhängig sein sollte.