Вопрос

У меня есть приложение на 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 для создания пользовательского приложения.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top