Я хочу настроить appender при запуске и затем динамично добавить и удалить его из различных регистраторов по требованию. Я предпочел бы иметь log4j, настраивают этот appender сам и просто захватывают ссылку на него при необходимости. Если это не возможно, я должен буду инстанцировать appender сам и держать на него.
Appenders are generally added to the root logger. Here's some pseudocode
// get the root logger and remove the appender we want
Logger logger = Logger.getRootLogger();
Appender appender = logger.getAppender("foo");
logger.removeAppender(appender)
// when we want to add it back...
logger.addAppender(appender);
I'm pretty sure you can do this on other loggers than the root logger as well, though I've never tried that.
Класс Logger имеет методы для getAllAppenders () , getAppender () , addAppender () и removeAppender () , унаследованные от класса Category . Однако класс Category устарел, и, кроме того, я никогда не пробовал делать это раньше, но это может быть полезной отправной точкой.
Я хочу сделать точно такое же. Я хочу настроить приложения в Log4J.Properties, а затем выберите некоторые и динамически добавляйте в rootLogger во время выполнения.
Я не мог выяснить, как получить доступ к придателям, отличным, кроме регистратора, к которому они были прикреплены, поэтому я закончил создать фиктивного регистратора и прикрепите к нему приложений, чтобы я мог получить их динамически. Это не идеально, хотя, как и любые ресурсы, используемые приложениями (например, файлами), даже если они не используются.
Я бы сделал так:
Итак, если это ваш собственный аппендер, сделать (2) будет просто, поскольку вы знаете значение свойств и знаете, чего ожидать. В противном случае вы, вероятно, захотите использовать отражение для инстанцирования класса и вызова его установщиков свойств перед выполнением (3).