У вас будет проблема boostrap, поскольку log4j должен быть инициализирован до Spring. Независимо от того, используете ли вы пользовательскую конфигурацию или стандартный инициализатор Log4j, он должен быть включен, прежде чем контекст приложения будет.
Теперь, теоретически, вы можете заставить свои пользовательские приложения «лениво» инициализировать себя (либо с помощью подхода, который вы предложили выше, либо путем создания самих приложений «полу» синглетонов - например, класс приложения имеет статическое поле экземпляра, которое заполняется afterPropertiesSet()
метод; таким образом, вы можете создать самого appender в виде bean-компонента внутри Spring), но он выглядит несколько грязным и непоследовательным.
Другой подход заключается в динамической реконфигурации Log4j после инициализации контекста Spring; например написать слушатель , чтобы поймать ContextStartedEvent
, получить все компоненты типа Appender
из контекста и добавить их в конфигурацию Log4j. Это также позволит вам создавать свои дополнения в виде bean-компонентов, но несколько избегать одиночного беспорядка.