2017-09-22 2 views
7

Ich habe eine Elixir-Regenschirm-Anwendung. Die Anwendungen unter dem Regenschirm verwenden Logger. Ich möchte ein Backend (logger_logstash_backend) für :logger Anwendung hinzufügen. Also, ich muss hinzufügen, dass als Abhängigkeit in deps Funktion in der Mischdatei.In Elixir Regenschirm App, wo sollte Logger Backend App als eine Abhängigkeit hinzugefügt werden?

In der äußersten Mix-Datei des Dach Anwendung, die Dokumentation der deps Funktion heißt es:

Abhängigkeiten hier sind nur für dieses Projekt verfügbar aufgeführt und von Anwendungen innerhalb des Apps-Ordner

nicht
zugegriffen werden

Das bedeutet, ich muss das Back-End-Modul als eine Abhängigkeit für jede der Anwendungen unter dem Dach hinzufügen. Dies verursacht jedoch mehrere Probleme:

  1. Es wird schwieriger, die einzelnen Anwendungen später als separate Bibliotheken zu verschieben.

  2. Die einzelnen Anwendungen unter dem Dach sind nicht tatsächlich abhängig von der benutzerdefinierten :logger Backend-Modul. Sie sind in Ordnung mit Standard :console Backend. Aber ich möchte ein zusätzliches Backend nur für prod-Umgebung haben. Aus diesem Grund ist es eher eine anwendungsübergreifende Angelegenheit, bei der ich gezwungen bin, die Abhängigkeit jeder Anwendung einzeln hinzuzufügen.

Kennen Sie eine bessere Strategie? Was ist es?

Antwort

0

Fügen Sie die Abhängigkeit nur in Ihre Anwendung (en) ein. Dann können Sie jede Anwendung so konfigurieren, dass sie das neue Logging-Backend verwendet.

+0

"konfigurieren Sie jede der Anwendungen, um das neue Logging-Backend zu verwenden" <- es hat die gleichen 2 Probleme, die ich in der Frage erwähnt habe. –

0

Jede Anwendung sollte ihre eigenen Abhängigkeiten und Konfigurationen haben.

Probleme, die Sie erwähnt:

  1. Es ist schwieriger wird später die einzelnen Anwendungen als separate Bibliotheken ausziehen.

Wenn Sie Konfigurationen innerhalb jeder App haben, das macht es tatsächlich einfacher, die einzelnen Anwendungen App aus dem Dach heraus zu bewegen. Wie in der Elixir guides erwähnt, müssen Sie einfach die App aus dem Verzeichnis apps/ verschieben.

  1. Die einzelne Anwendungen unter dem Dach sind nicht wirklich abhängig von der Gewohnheit: Logger Backend-Modul. Sie sind in Ordnung mit Standard: Konsole Backend. Aber ich möchte ein zusätzliches Backend nur für prod-Umgebung haben. Aus diesem Grund ist es eher eine anwendungsübergreifende Angelegenheit, bei der ich gezwungen bin, die Abhängigkeit jeder Anwendung einzeln hinzuzufügen.

Wenn der benutzerdefinierte Logger Backend nur in der Produktionsumgebung erforderlich ist, können die Anwendungen diese Konfiguration nur hinzufügen, um config/prod.exs Datei und diese Umgebung nur in prod verwenden.

+0

Protokollierung ist ein Cross-Applications-Problem. Wenn wir eine Anwendung unter einem Dach von einem bestimmten Logger-Backend abhängig machen, wie ist es dann einfach, die App später zu verschieben? Die App ist nicht abhängig von Logger zu funktionieren. –

+0

In Ihrem Beispiel hängt die Anwendung vom Logger-Backend ab, aber in der Produktionsumgebung. Es sollte möglich sein, die Anwendung aus der Umbrella-App zu entfernen und trotzdem die App mit 'MIX_ENV = prod' laufen zu lassen. Aus diesem Grund ist es einfacher, die Abhängigkeiten und Konfigurationen in den einzelnen Apps später zu verschieben. – Emil

+0

Es ist möglich, dass ein oder zwei Apps unter dem Dach entfernt werden und kein Logger-Backend benötigt wird. In diesem Fall ist es schwierig, die Abhängigkeit vom Logger-Back-End in jeder einzelnen App beizubehalten. –

Verwandte Themen