应用程序在使用Apache CXF之后开始使用Logback



在我的应用程序中,一旦我添加了SOAP接口,它就会尝试使用Logback。由于我们没有Logback,它正在抛出ClassNotFound的异常。

我添加了以下依赖项:

<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-spring-boot-starter-jaxws</artifactId>
<version>3.1.12</version>
</dependency>

我有以下日志的依赖性。

<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>

我添加了以下配置来配置端点。

@Configuration
public class WebServiceConfig {
@Autowired
private ReservationService reservationService;
@Bean
public Endpoint reservationEndpoint(){
Endpoint endpoint = new EndpointImpl(getBus(), reservationService);
endpoint.publish("/Reservation");
return endpoint;
}
@Bean
public Bus getBus() {
return new SpringBus();
}
}

在此之后,我得到以下错误:

Caused by: java.lang.ClassNotFoundException: ch.qos.logback.classic.joran.JoranConfigurator
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)

我不知道它是如何使用Logback的。此外,我将META-INF/cxf/org.apache.cxf.Logger配置为以下值:org.apache.cxf.common.logging.Slf4jLogger。尽管如此,它仍在使用Logback。早些时候,我的应用程序使用Log4j2。我想继续使用现有的日志记录系统。

在进一步的调试中,我发现在运行时使用org.apache.cxf.common.logging.Slf4jLogger属性,我们可以控制日志记录类。我尝试了org.slf4j.core.Logger和log4j2类。他们面临着"没有这样的方法例外"的错误。

我想解决:

  1. 如何强制应用程序使用现有的日志系统
  2. 即使它需要Logback依赖,如何使用Log4j2

添加了对所有春季启动程序depenency的排除,而不仅仅是对web

<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>

最新更新