2008-12-03 23 views
9

Ich brauche ein kleines, portables Framework für die Anmeldung an Embedded Linux. Im Idealfall würde es in eine Datei oder einen Socket ausgeben, und eine Art Log-Rotation/Komprimierung wäre auch nett.Logging-Frameworks für Embedded Linux?

Bisher habe ich viele Frameworks gefunden, aber fast alle von ihnen haben gewaltige Build-Prozeduren oder erfordern die Verwendung von Application Frameworks (Log4cxx benötigt zum Beispiel die Apache Portable Runtime, mit der ich mich lieber nicht beschäftigen würde. ..).

Nur auf der Suche nach etwas einfach und robust, aber alles, was ich finde, ist kompliziert oder erfordert viel sekundären Müll nur um zu laufen.

Vorschläge? (und wenn die Antwort ist meine eigene rollen, das ist in Ordnung, aber ... es ist toll, das zu vermeiden)

Antwort

0

Implementieren sehr robust Logging-Mechanismus in C über 1000 Code-Zeilen (von unserem Code-Basis). 90% davon definieren unterschiedliche Abschnitte. Dies beinhaltet verschiedene Makros DBG_E DBG_W DBG_TRACE etc ... und Aufteilen in den Abschnitt, Laufzeitänderung von Debug-Level und Debug-Module (beinhaltet keine Komprimierung, nur einfache Print-Abstraktion, die auf verschiedene Arten implementiert werden kann Datei/Socket/seriell etc ...) .
Ich werde schätzen, dass es dauert einige Tage zu implementieren. Die Unterseite werden Sie ein paar Tage verbringen die Oberseite, die Sie etwas bekommen, das für Ihre Bedürfnisse und nichts mehr funktioniert, ich verstehe, dass Sie auf Embedded-Plattform arbeiten und Fußabdruck und Speichernutzung wichtig sind, die beste und optimierte Lösung wird einer sein, den du schreibst. Wir haben diese paar Tage investiert. und verwenden Sie es über verschiedene Produkte/Projekt und anpassen/verbessern mit der Zeit nach nach realen Bedürfnissen. Hauptproblem der generischen Lösung, die es in der Regel tun wird, was Sie brauchen und noch viel mehr, diese mehr in der Regel nur Taille der Ressourcen.

0

Ich kann mir nicht vorstellen, dass Ihre Plattform zu klein ist, um log4cxx und APR zu enthalten, auch keine große Bibliothek, und selbst die kleinste Plattform wird wahrscheinlich Platz für sie haben.

Sie könnten einfach syslog verwenden, das von der C-Bibliothek zur Verfügung gestellt wird - ein syslog-Daemon wird von busybox zur Verfügung gestellt (was Sie zweifellos bereits verwenden, wenn Sie auf einer wirklich kleinen Plattform sind). Ich weiß nicht, ob der syslogd von busybox sich im Netzwerk anmelden kann, aber er hat ein gewisses Maß an Flexibilität. Sie können Log-Rotation mit Shell-Skripten ziemlich trivial tun.

9

Verwenden Sie syslog(3) und syslogd von BusyBox. BusyBox kann sehr kompakt sein, wenn sie abgespeckt wird und nicht von etwas anderem als libc abhängig ist. Sie können alles entfernen, was Sie nicht wollen, also ist es perfekt möglich, es nur für die Protokollierung zu verwenden.

Wir verwenden BusyBox auf einer Reihe von eingebetteten Systemen, sowohl Linux als auch uClinux, und finden ihre Protokollierungsfunktionen sehr zuverlässig.

1

Vielleicht sollten Sie in Erwägung ziehen, etwas Zeit in ein gutes Logging-Framework zu investieren, da Sie dies auf Ihrem Embedded Linux verwenden werden. ... und printf ...

Ich habe etwas gekocht, wo ich verschiedene Protokollierungsstufen pro Modul in Laufzeit aktivieren/deaktivieren kann.

Haben Sie jemals versucht, Multithread-Anwendungen unter Linux zu debuggen?

Viel Glück!

+0

stimme ich zu. In einem früheren Projekt hatten wir etwas ähnliches mit Laufzeitkontrolle der Protokollierung entwickelt. Das hat super geklappt! Schade, dass wir den Quellcode nicht öffnen konnten. –

2

Ich habe keine Erfahrung mit dem log4cxx-Modul, aber ich verwende APR auf einem eingebetteten Ziel unter Linux (es basiert auf der Atmel AT91SAM926x Prozessorfamilie). Es war wirklich einfach zu konfigurieren und zu kompilieren (mehr oder weniger ./configure --host = arm-none-linux-gnueabi), so dass ich keine Angst davor hätte, den log4cxx-Pfad zu durchlaufen.

0

Verwenden Sie klogd es liest die Kernel-Protokollnachrichten (aus/proc/kmsg Kernel) Schnittstelle und leiten diese Nachrichten an entsprechende Verzeichnis. Sie können den konfigurierbaren syslogd Daemon zusammen mit klogd verwenden, der Kernel-Nachrichten in entsprechende Dateien im Verzeichnis/var/log/umleitet. Zum Beispiel werden Protokolle, die sich auf den Mail-Dienst beziehen, in /var/log/main.log gespeichert und Protokolle, die sich auf den Kernel-Bootprozess beziehen, werden in /var/log/boot.log gespeichert. Der Benutzer kann das Log-Parsing mit der Konfigurationsdatei syslogd konfigurieren.

Aber die Verwendung von syslogd-Daemon in entsprechende Datei

einzuloggen, dass speichern tut Betrieb Platten weil für jeden Protokollmeldungen syslog zu Ihren System Leistungseinbußen führen kann

Log-Sequenz

Nachrichten aus dem Kernel --->klogd (Zugriffsnachrichten von Kernel-Ringpuffer) ->syslogd ->/var/log/*