смешивание log4cxx и log4net
Вопрос
У меня есть приложение на c ++, которое регистрирует какой-либо файл с помощью log4cxx (приложение RollingFile). Я хочу войти в тот же файл, в то же время, из другого модуля, написанного на C #; поэтому я настроил log4net на использование того же файла, но я не могу получить новые сообщения. Если я деактивирую запись в журнал c ++, я могу видеть сообщения c #. Так что я думаю, что это проблема блокировки, и искал вариант конфигурации, чтобы сказать log4cxx не блокировать файл. Я пришел в модель MinimalLock для log4net, но ничего не нашел в log4cxx ... Кто-нибудь знает, можно ли это сделать и как?
заранее спасибо,
Эрнесто Каллен
Решение
Я думаю, что вы можете столкнуться с проблемами параллелизма и конкуренции независимо от того, какую конфигурацию вы используете, если вы пытаетесь записать два разных процесса в один файл.
Вы должны изучить отправку событий журнала из обоих процессов в третье централизованное место - взгляните на RemotingAppender в log4net, я полагаю, что в log4cxx есть нечто подобное.
Другие советы
Даже если вопрос довольно старый (и помечен как ответ), и вы, вероятно, уже закончили свой проект:
log4net и log4cxx - это разные фреймворки, которые не знают друг друга, поэтому вы не можете настроить их для записи в один и тот же файл. Только один из фреймворков будет иметь файл, открытый для записи, в зависимости от того, что было первым.
То, что я сделал в аналогичной ситуации (унаследованное приложение c ++ с настраиваемым протоколированием нового модуля c # с использованием log4net), представляет собой создать настраиваемый app4 log4net , который перенаправляет трассировки в старую инфраструктуру ведения журналов. В проекте, в котором я участвовал, старый код C ++ имел интерфейс Windows COM для написания сообщений журнала, который использовал пользовательский аппендер.
Другим способом было бы использовать C ++ / CLI для создания пользовательского приложения.