Ответы пользователя по тегу Java
  • Как замокать static объект через Mockito?

    @AndreiLED
    Короткий ответ: никак, Mockito позволяет замокать только локальные поля/методы

    Длинный ответ: надо править тестируемый код, чтобы добавить в него возможность из теста заменить стандартное значение статического поля замокированным. Или конвертировать статическое поле в локальное, что является рекомендованным подходом при написании тестируемого кода.
    Ответ написан
    Комментировать
  • Как настроить log4j для многопоточной среды?

    @AndreiLED
    так как MDC статический класс данные перезаписывались и снова каша

    Это не так - MDC использует ThreadLocal, поэтому значения в нем для каждого потока свои собственные, поэтому в лог файле для каждого сообщения будет выведен именно тот самый ид, который был указан в MDC именно для того потока, который сообщение и породил.

    Каша, скорее всего, возникает просто от того, что параллельные потоки пишут параллельно и в итоге в логах записи каждой конкретной сессии не идут все подряд, а перемежаются с другими сессиями.
    Но это совершенно нормально для логов в параллельной среде. Ид сессии в логи добавляют вовсе не для упорядочивания, а для того, чтобы потом было легко извлечь логи, относящиеся к определенной сессии. В простейшем варианте это делается через grep %session% file.log. Если система порождает множество ращнообразныз логов, то применяют системы вроде Splunk для упрощения поиска по множеству файлов и организации всех логов в единую базу.

    log4j.appender.asyncLog=com.log.AsyncAppenderHelper
    ПОможет ли он?

    Интересно почему какой-то сторонний класс (судя по пакету), а не AsyncAppender из самого log4j.
    Но тем не менее, это не поможет: задача, которую решают AsyncAppender-ом - это накапливать сообщения в памяти и потом пачкой записывать их на диск (RollingFileAppender - это синхронный appender и он пишет все сообщения в файл сразу же). Порядок сообщений при использовании AsyncAppender никак не меняется - они по прежнему идут в том порядке, в каком было порождены.
    Ответ написан
    Комментировать