2013-05-14 5 views
1

Я хочу использовать структуру ведения журнала, такую ​​как log4cxx, в многопоточном приложении.Фреймворки регистрации и синхронизация в многопоточных приложениях

Если выход журнала будет в файл, необходимо выполнить сериализацию сообщений. Я спрашивал себя, как (и если) эти структуры получают правильную сериализацию вывода без использования какого-либо объекта синхронизации.

Я предполагаю, что если он использует объекты синхронизации (например, для доступа к очереди для сообщений журнала), это может привести к изменениям в поведении вовлеченных потоков, поэтому также изменение поведения (и ошибок ...) все зарегистрированное приложение.

ответ

2

log4cxx действительно синхронизирован, как и другие рамки log4XXX. Синхронизация выполняется в приложениях и необходима, чтобы гарантировать, что содержимое записей журнала не смешивается. Это не изменить поведение ваших потоков, но потоки встречаются с небольшим ударом. Снижение производительности мало по сравнению с ударом производительности ввода-вывода при входе в файл.

Если вы все еще обеспокоены производительностью, вы можете рассмотреть возможность использования асинхронного ведения журнала (используя AsyncAppender, который обрабатывает ведение журнала в отдельном потоке. Использование асинхронного подхода не может гарантировать, что сообщения регистрируются (например, если приложение выходит из строя до регистрации нить обрабатывает сообщение). Самый простой способ повысить производительность - уменьшить количество каротажа.

Смежные вопросы