Zurzeit arbeite ich an einer realtime Anwendung auf linux, mit einem selbstgeschriebenem Logger. Dabei wird das Programm gestartet, welches den realtime Thread erzeugt und daneben einen Logging Thread. Insgesamt laufen also 3 Threads, wobei die beiden nicht-logger in einen Buffer schreiben können, der dann durch denn Logging Thread ausgetauscht und geleert wird (print auf console, oder Weiterleitung in Datei/Socket/...) Dieser Logger wurde von einem Arbeitskollegen geschrieben, der nicht mehr hier arbeitet. Das Problem ist nun, dass die Logs vom RT-Thread nicht ausgegeben werden. Um die Wartbarkeit zu erhöhen, würde ich am liebsten den Logger Code rausschmeissen und syslog benutzen, welches bereits im Kernel enthalten ist. Nun meine Frage, bevor ich all die Teile umschreibe, welche Loggen, kann das mit der realtime Bedingung funktionieren? Es dürfte nämlich nicht geschrieben werden, solange mein RT-Thread läuft, sondern erst danach. Ich habe schon gelesen, dass syslog thread-safe sei, aber reicht dies aus?
Es gibt keine RT-Garantie für die syslog()-Funktion. Du brauchst immer noch einen separaten Thread.
Clemens L. schrieb: > Es gibt keine RT-Garantie für die syslog()-Funktion. Was sind denn die Auswirkungen? Gehen Logmeldungen einfach verloren, oder wartet meine Applikation, bis syslog die Nachrichten auf der Platte geschrieben hat?
syslog() könnte auf Platte, Netzwerk, oder sonstige Geräte zugreifen und hat deshalb keine Obergrenze für die Ausführungszeit. In der Praxis kommuniziert syslog() einfach nur mit dem syslog-Daemon über das /dev/log-Socket, was bedeutet, dass nebenher noch ein separater Prozess werkelt. Aber dein Problem ist ja anscheinend die Kommunikation deiner Threads untereinander; da wird das Austauschen des Loggers nicht helfen.
Syslogging über UDP/lookback dürfte ziemlich narrensicher sein, was das Zeitverhalten des Meldenden angeht. Da gibts kaum einen Grund, weshalb es klemmen sollte. Nur ist damit natürlich auch nicht gesichert, dass es überhaupt irgendwo ankommt.
:
Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.