Я хочу иметь журнал диагностики, который создается несколькими задачами, управляющими данными. Эти задачи могут быть в нескольких потоках. Каждой задаче нужно написать элемент (возможно с подэлементами) в журнал; входите и быстро выходите. Если бы это была ситуация с одной задачей, я бы использовал XMLStreamWriter, поскольку это похоже на лучшее соответствие простоты/функциональности без необходимости удерживать закрашивание XML-документа в память.
Но это не однозадачная ситуация, и я не уверен, как лучше всего убедиться, что это "threadafe" , где "threadafe" в этом приложении означает, что каждый элемент журнала должен быть записан в журнал правильно и последовательно (один за другим и не чередующиеся каким-либо образом).
Любые предложения? У меня есть туманная интуиция, что путь - это использовать очередь элементов журнала (каждый из которых может быть быстро создан: мое приложение занято выполнением реальной работы с учетом производительности) и имеет отдельный поток, который обрабатывает журнал элементы и отправляет их в файл, поэтому ведение журнала не прерывает производителей.
Ведение журнала не обязательно должно быть XML, но я хочу, чтобы оно было структурированным и машиносчитываемым.
edit: Я помещал "threadafe" в кавычки. Log4j кажется очевидным выбором (новым для меня, но старым для сообщества), зачем изобретать колесо...