小编And*_*eas的帖子

Spring Boot:LoggingApplicationListener干扰Application Server日志记录

Spring Boot使用自动初始化基础日志系统LoggingApplicationListener.如果我正在开发的应用程序是孤立的或独立的,那么这是一件好事.

但是我正在开发一个Web应用程序,它将部署到WSO2 Application Server中,它提供统一的日志记录(使用log4j),具有中央日志级别管理(运行时通过Web界面),业务报告等功能.

如果我"按原样"使用Spring Boot,它会完全记录所有内容.我的第一个镜头是,删除spring-boot-starter-logging并手动添加slf4j-apiprovided.这在一定程度上起作用,因为LoggingApplicationListener现在覆盖了WSO2提供的全局logmanager的设置(甚至导致全局appender被关闭).

我想出的唯一"解决方案"是通过反射删除监听器.然后Spring Boot开始表现得完全正常(通过全局记录器记录,而不是覆盖预定义的日志级别,输出格式,appender等)

那个"解决方案"看起来像这样:

@SpringBootApplication
public class MyApp extends SpringBootServletInitializer {

    public static void main(String... args) {
        SpringApplication.run(MyApp.class, args);
    }

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        try {
            Field appField = SpringApplicationBuilder.class.getDeclaredField("application");
            appField.setAccessible(true);
            SpringApplication app = (SpringApplication)appField.get(builder);

            Field listenersField = SpringApplication.class.getDeclaredField("listeners");
            listenersField.setAccessible(true);
            List<ApplicationListener<?>> listeners = (List<ApplicationListener<?>>) listenersField.get(app);
            for (int i = listeners.size() - 1; i >= 0; --i) {
                if (listeners.get(i) instanceof LoggingApplicationListener) { …
Run Code Online (Sandbox Code Playgroud)

java logging spring wso2carbon spring-boot

10
推荐指数
2
解决办法
2735
查看次数

标签 统计

java ×1

logging ×1

spring ×1

spring-boot ×1

wso2carbon ×1