java - 无法创建类 org.apache.logging.log4j.core.impl.Log4jContextFactory

标签 java logging spring-boot build.gradle

我正在为项目使用 spring boot 应用程序,在使用 java -jar build/libs/com.user.admin.rest.services.jar 从 jar 运行项目时出现以下错误。但它不是阻止程序,我能够访问 api,并且记录器按预期工作正常。我只想解决这个错误。

ERROR StatusLogger Unable to create class org.apache.logging.log4j.core.impl.Log4jContextFactory specified in jar:file:/Users/Samuel/UserMgmt/com.user.admin.rest.services/build/libs/com.user.admin.rest.services.jar!/META-INF/log4j-provider.properties
 java.lang.ClassNotFoundException: org.apache.logging.log4j.core.impl.Log4jContextFactory
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at org.apache.logging.log4j.spi.Provider.loadLoggerContextFactory(Provider.java:96)
    at org.apache.logging.log4j.LogManager.<clinit>(LogManager.java:91)
    at com.user.admin.rest.services.api.UserServiceResource.<clinit>(UserServiceResource.java:32)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:142)
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:89)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1147)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1099)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:513)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:761)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542)
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:122)
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:737)
    at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:370)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:314)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1162)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1151)
    at com.user.admin.rest.services.api.Application.main(Application.java:27)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48)
    at org.springframework.boot.loader.Launcher.launch(Launcher.java:87)
    at org.springframework.boot.loader.Launcher.launch(Launcher.java:50)
    at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:51)

我在 build.gradle 文件中为记录器添加了以下行。

编译'org.apache.logging.log4j:log4j-api:2.8.2' 编译'org.apache.logging.log4j:log4j-core:2.8.2'

下面给出了我的 log4j2.xml 文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xml>
<Configuration status="ERROR" name="example-config">
    <Properties>
        <Property name="PATTERN">%-5level %d [%t] %c:%M(%L): %m%n</Property>
    </Properties>
    <Appenders>
        <Console name="STDOUT" target="SYSTEM_OUT">
            <PatternLayout pattern="${PATTERN}" />
        </Console>
    </Appenders>
    <Loggers>
        <Root level="TRACE">
            <AppenderRef ref="STDOUT" />
        </Root>
    </Loggers>
</Configuration>

最佳答案

Generally speaking, you should never need to switch logging implementations; Logback should suit you fine. However, if you decide that you’d rather use Log4j or Log4j2, you’ll need to change your dependencies to include the appropriate starter for the logging implementation you want to use and to exclude Logback.
Spring Boot in Action

在 Gradle 中将 Logback 换成 Log4j2

  1. 排除默认日志记录
configurations {
  all*.exclude group:'org.springframework.boot',
               module:'spring-boot-starter-logging'
}
  1. 添加 Log4j2 日志
compile("org.springframework.boot:spring-boot-starter-log4j2")

您可以找到 Spring Boot 提供的 spring-boot-starter-log4j2 依赖版本的详细信息 here .

关于java - 无法创建类 org.apache.logging.log4j.core.impl.Log4jContextFactory,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44923089/

相关文章:

java - 控制台上的 log4j 信息

java - redis 缓存中的自定义名称

java - where子句中的hql问题

Docker 容器日志记录

java - JDeveloper 错误 : (CMD property not found in autorun. inf)

android - 如何获取android live app的日志和崩溃数据?

spring - 如何修复此 FirebaseApp 名称 [DEFAULT] 已存在! spring-boot 和 firebase

java - spring boot GenericFilterBean ,过滤器在客户端返回错误代码和响应头

java - getAudioInputStream 格式无效,尝试在 Java 中播放声音

java - 使用 Java 将 zip 文件解压到 HDFS