2008-10-21 14 views
7

Mam aplikację C++, która loguje się do jakiegoś pliku przy użyciu log4cxx (aplikator RollingFile). Chcę zalogować się do tego samego pliku, w tym samym czasie, z innego modułu napisanego w języku C#; więc skonfigurowałem log4net do używania tego samego pliku, ale nie mogę pobrać nowych wiadomości. Jeśli dezaktywuję logowanie C++, widzę komunikat C#. Więc myślę, że to jest problem z blokowaniem i szukałem opcji konfiguracji, aby powiedzieć log4cxx, aby nie blokował pliku. Przyszedłem do modelu MinimalLock dla log4net, ale nie mogłem znaleźć niczego w log4cxx ... Czy ktoś wie, czy można to zrobić, i jak?miksowanie log4cxx i log4net

góry dzięki,

Ernesto Cullen

Odpowiedz

4

myślę, że może napotkasz współbieżności i rywalizacji problemów bez względu na to jaka konfiguracja używać tak długo, jak starają się mieć dwa różne procesy zalogować się do tego samego plik.

Powinieneś sprawdzić wysyłanie zdarzeń z obu procesów do trzeciej scentralizowanej lokalizacji - spójrz na RemotingAppender w log4net, zakładam, że log4cxx ma coś podobnego.

1

Nawet jeśli pytanie jest dość stary (i oznaczone jako odpowiedzi) i pewnie już wykończone projektu:

log4net i log4cxx różnią framworks rejestrowania że nie znam siebie, dzięki czemu można nie skonfiguruj ich do zapisu do tego samego pliku. Tylko jedna z ramek będzie miała otwarty plik do zapisu, w zależności od tego, co nastąpi wcześniej.

Co zrobiłem w podobnej sytuacji (starsza aplikacja C++ z niestandardowym rejestrowaniem nowego modułu C# przy użyciu log4net) to create a custom log4net appender, która przekazuje ślady do starego obszaru rejestrowania. W projekcie, w którym uczestniczyłem, stary kod C++ posiadał interfejs COM systemu Windows do pisania komunikatów dziennika, z których korzystał niestandardowy moduł aplikacji.

Innym sposobem byłoby użycie C++/CLI do utworzenia niestandardowego aplikanta.