2010-05-21 9 views
8

Ich habe ein System, wo ein zentraler Java-Controller Analyseprozesse startet, die in C++, Java oder Python geschrieben werden können (meist sind sie C++) . Alle diese Prozesse werden derzeit auf demselben Server ausgeführt. Was sind Ihnen Anregungen zuWelche Logging-Bibliothek für sprachübergreifendes (Java, C++, Python) System verwenden

  • erstellen zentrales Protokoll, zu dem alle Prozessen
  • schreiben Was passiert, wenn in Zukunft schiebe ich einige Prozesse auf einem anderen Server. Wie kann ich die verteilte Protokollierung unterstützen?

Vielen Dank!

Antwort

1

Apache hat cross-platform logging libraries, mit denen Sie aus verschiedenen Programmiersprachen mit ähnlichen APIs protokollieren können. Leider haben sie keine Python-API, obwohl Sie in der Lage sein sollten, sie mit log4cpp und Boost.Python aufzurollen.

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 Protokollierungsfunktion anzumelden. Das Windows-Ereignisprotokoll verfügt über einige Funktionen für die verteilte Protokollierung, das AFAIK-Syslog jedoch nicht.

Obwohl ich keine Erfahrung damit habe, kann eine bessere Passform Facebook's Scribe Projekt 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.

+1

Syslog unterstützt verteilte Protokollierung. Der klassische syslogd unterstützt das Weiterleiten von Nachrichten an einen anderen Host mit der Syntax '@ hostname'. Siehe Abschnitt "Remote Machine" in der Manpage syslog.conf: http://linux.die.net/man/5/syslog.conf –

+0

Scribe sieht sehr interessant aus, ich untersuche es gerade. – recipriversexclusion

5

Ich würde empfehlen, die native Protokollierung der Plattform verwenden, die Syslog auf Posix und Ereignisprotokoll unter Windows ist.

Für C++ können Sie die systemeigenen Aufrufe auf der Plattform verwenden.

Ich weiß Python kommt mit Syscall Wrapper auf Posix und es gibt Wrapper für Event Log in der PyWin32 extension. Ich nehme an, dass jemand 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 generische LOG_LOCAL0 bis LOG_LOCAL7 gibt, können Sie keine beliebigen 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.

+0

Danke für die Antwort.Können Sie separate Syslog-Protokolle auf demselben Computer erstellen? Wir haben verschiedene Dienstleistungen, jede mit einer Anzahl von Prozessen und wir wollen die Protokolle ideal getrennt halten. – recipriversexclusion

+0

@recipriversexclusion - aktualisierte Antwort, um Ihren Kommentar zu beantworten. –

+0

Eine andere nette Sache über Syslog ist, dass alle vernünftigen Implementierungen bereits wissen, wie man Protokollnachrichten über das Netzwerk an einen anderen Rechner sendet. –

1

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 ferne 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.

Verwandte Themen