Ich habe ein System, in dem ein zentraler Java-Controller Analyseprozesse startet, die in C ++, Java oder Python geschrieben sein können (meistens sind es C ++). Alle diese Prozesse werden derzeit auf demselben Server ausgeführt. Was sind deine Vorschläge für
?Danke!
Apache verfügt über plattformübergreifende Logging-Bibliotheken , mit denen Sie mithilfe verschiedener APIs aus verschiedenen Programmiersprachen loggen können. Leider haben sie keine Python-API, obwohl Sie in der Lage sein sollten, sie mit log4cpp und Boost.Python zu peitschen.
Ein Projekt, an dem ich arbeite, verwendet eine dieser Bibliotheken, um sich bei einer Datenbank anzumelden, was uns eine "verteilte Protokollierung" mit einem zentralen Ort für die Protokollnachrichten ermöglicht. Ich muss zugeben, dass ich kein Fan davon bin. Ein anderes Projekt, an dem ich arbeite, verwendet eine dieser Bibliotheken, um sich bei der nativen Protokollierungseinrichtung anzumelden. Das Windows-Ereignisprotokoll hat einige Funktionen für die verteilte Protokollierung, aber AFAIK syslog nicht.
Obwohl ich keine Erfahrung damit habe, könnte ein Facebook-Projekt sinnvoller sein. Das Feature-Set entspricht Ihren Anforderungen, einschließlich einer Python-API. Leider verwendet es Thrift, das für C ++ unter Windows nicht funktioniert (das heißt, der Thrift-Compiler erzeugt C ++ - Code, der nur unter UNIX funktioniert). Sie können dieses Problem mit Cygwin umgehen, aber ich kann nicht versprechen, dass dieser Ansatz funktioniert.
Ich würde empfehlen, den nativen Logger der Plattform zu verwenden, bei dem es sich um syslog unter Posix und Event Log unter Windows handelt.
Für C ++ können Sie die systemeigenen Aufrufe auf der Plattform verwenden.
Ich weiß, dass Python mit syscall wrapper für Posix geliefert wird und Wrapper für das Event Log in der PyWin32-Erweiterung vorhanden sind. Ich nehme an, dass jemand inzwischen Java-Wrapper erstellt hat.
Aktualisieren
In Bezug auf Syslog und mehrere Dateien. Syslog unterstützt das Konzept von Einrichtungen - über Einrichtungen können Sie verschiedene Protokolle zu verschiedenen Dateien gehen. Leider sind Einrichtungen vordefiniert; während es 8 allgemeine gibt LOG_LOCAL0
bis LOG_LOCAL7
können Sie keine willkürlichen Einrichtungen definieren.
Beachten Sie auch, dass der syslog-Daemon entscheidet, wo Protokollmeldungen für jede Einrichtung / Ebene weitergeleitet werden. Möglicherweise müssen Sie Ihre syslog-Daemon-Konfiguration anpassen, damit jede Einrichtung in eine andere Datei gesendet wird.
Ich würde Apache log4cxx oder Apache log4j verwenden. Es ist effizient. Es verfügt über Logger-Hierarchien, um Ihre Protokolle zu modularisieren. Es ist seit einiger Zeit bewährte Technologie. Derzeit existieren Appender für die Konsole, Dateien, GUI-Komponenten, Remote-Socket-Server, NT-Ereignisprotokollierer und Remote-UNIX-Syslog-Daemons. Es ist auch möglich, asynchron zu loggen.
Wie kann ich die verteilte Protokollierung unterstützen? Mit Remote-Socket-Servern Appender zum Beispiel.