К сожалению, не существует существующего приложения log4j, которое могло бы сделать это.
Однако можно было бы разработать собственный приложение (например, как подкласс существующего приложения).Он должен был бы отслеживать его пропускную способность и соответственно отбрасывать сообщения.
У пользовательского подхода к аппендеру есть два предостережения:
В более крупной системе аппендер будет работатьна сервере журналов Log4J, а не в вашем приложении.Приложение будет отправлять сообщения на сервер журналов, который впоследствии вызывает приложение для сохранения (в файле, базе данных и т. Д.).Теперь основное усилие здесь состоит в том, чтобы доставить сообщение на сервер журналов, поэтому удаление сообщения на сервере журналов будет огромной тратой ресурсов.Вместо этого вам придется отказаться от него на стороне клиента (то есть в вашем приложении).
Построение сообщения иногда дорого (создание объектов, строк, параметризованных сообщений, сбор статистики)., измерьте время и т. д.).Опять же, это пустая трата ресурсов, чтобы сделать это, если бы аппендер отбросил результаты.
Тем не менее, это может быть сделано.должен был бы быть подклассом SocketAppender, чтобы сетевые издержки не тратились впустую.
Во-вторых, appender должен был бы предложить очень эффективный способ для приложения выяснить, отбрасываются ли сообщения в настоящее время.Затем в своем приложении вы можете написать эффективный код, например:
if (MyLogHelper.isActuallyLogging(LOGGER, Level.DEBUG)) {
LOGGER.debug(constructExpensiveMessage());
}