Если вы используете java.util.logging
, посмотрите на Handler
базовый класс , если вы используете log4j, посмотрите на Appender
. В обоих случаях вам необходимо каким-либо образом связать IMEI с сообщением, чтобы код, пишущий сообщение журнала, мог выбрать соответствующий файл.
Есть два подхода к этому.
Сначала необходимо расширить класс событий журнала (LogRecord
или LoggingEvent
соответственно). Это позволит вам войти, используя ваше событие, которое содержит IMEI. Однако это не учитывает регистрацию, выполняемую другими библиотеками и т. Д. При выполнении диалога с устройством.
Другой альтернативой является использование ThreadLocal. Установите IMEI, связанный с сокетом, всякий раз, когда вы получаете сообщение или формулируете сообщение. Убедитесь, что ведение журнала происходит в одном и том же потоке, а все очереди выполняются в обработчике / приложении журнала. Ищите / задавайте вопросы о ThreadLocals, если вы не знакомы с этим подходом. Я считаю, что в Log4J NDC
и MDC
реализована такая стратегия, но я не пытался выполнять специализированную обработку контекста у аппендера.
Наконец, имейте в виду, что в некоторых операционных системах не хватает файловых дескрипторов, если вы действительно хотите оставить «тысячи» файлов журналов открытыми. В зависимости от того, сколько файлов, вы можете рассмотреть возможность записи сообщений журнала (с IMEI) в базу данных или выполнения своего рода закрытия файлов на основе LRU. В последнем случае у вас практически не было бы файловых дескрипторов для файлов журналов, которые не были затронуты некоторое время.