Forum: PC-Programmierung log4cpp sauber beenden


von Michael R. (dj_motionx)


Lesenswert?

Hallo !

Habe beschlossen log4cpp in mein Projekt einzubauen. Nach einem Beispiel 
in dem ich mir mal alle Funktionen sowie den Aufbau angeschaut habe bin 
ich jetzt dabei das ganze in mein laufendes Projekt nachzuziehen. Eine 
etwas offene Fraeg die sich mir gestellt hat war wie kriege ich meinen 
konfigurierten logger in die anderen erstellten klassen rein.
Gelöst habe ich das so indem ich eine private Variable in der klasse 
angelegt habe und dann mittel Initialisierungsliste und getInstance das 
ganze abgeholt habe.->
1
  private:
2
     log4cpp::Category& LidDataQueuesLogger;  /**< Logging */
 und
1
LIdQueues::LIdQueues(int action) : LidDataQueuesLogger(log4cpp::Category::getInstance("Lid Data Queues Category") )

somit habe ich eine Referenz auf die Kategorie in der ganzen Klasse zur 
verfügung.
Frage 1 darf man das so machen bzw. macht man das so.

Wie gesagt in meiner Bsp Applikation hat alles wunderbar funktioniert. 
Jedoch bekomme ich jetzt bei meiner Implementierung einen segmentation 
fault am Ende. Ich vermut dass irgendwas an den loggern nicht passt (Es 
sind mehrere Kategorien mit verschiedensten Appenden). Es kommt aber 
alles bis zum letzten log Eintrag richtig in die Files und auf die 
Console. Der seg fault tritt also beim beenden auf. Frage2: Wie muss ich 
den die Referenzen in meinen Klassen (bzw. die Categirien) richtig 
beenden (flushen und schließen - sodass auch die laufenden threads 
beendet werden)?
1
 .shutdown
 bringt leider nicht das gewünschte Ergebnis.

Hoffe es kann mir jemand etwas weiterhelfen. Sollte etwas nicht 
verständlich sein einfach nochmal nachfragen.

Grüße Michi

von Michael R. (dj_motionx)


Lesenswert?

Hallo noch mal !

Langsamgsam aber sicher hab ich den Bug an den Füßen. Das problem liegt 
nicht bzw. schon am beenden. Hab für mehrere categories den glaichan 
appender geadded. Genau das mag das log4cpp nicht. Nun ist mir aber 
nicht klar dass ich für 2categories 2 appender mit dem gleichen file 
machen muss (was passiert wenn ich die 2 rollingFileAppender 
unterschiedlich konfiguriere) -> Logischer wäre also wenn man für 
mehrere Kategorien gleiche Appender objekte registrieren könnte. Tja mal 
schauen wenn ich ne Lösung hab (oder mir ejmand weiterhelfen kann) meld 
ich mich nochmal.

Grüße Michi

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Also ich kenne ja jetzt nicht Log4cpp (solche 'Bugs' sind der Grund 
warum ich versuche C++ zu meiden) aber bei Log4J ist es eigentlich 
üblich die ganzen Appender etc. über ein XML Konfiguration festzulegen 
und nicht selbst hinzuzufügen.
Außerdem nutzt man in der Regel statische Logger, ggf. wird da 
irgendwo etwas zweimal destruiert wenn du das immer als Membervariable 
machst?

von Roland Kern (Gast)


Lesenswert?

Hallo Michi,

also ich würde das holen und freigeben der Referenz über 
zugriffsfunktionen lösen, mit entsprechenden Zählern und wenn die Zähler 
auf 0 sind, also keine Referenz mehr, erst dann die freigabe machen. So 
ähnlich macht das auch COM und Co.

Gruß,
Roland

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Glaubst Du, daß das nach drei Jahren noch jemanden interessiert, der 
für "mehrere categories den glaichan appender geadded" hat?

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
Noch kein Account? Hier anmelden.