2017-05-31 168 views
1

我有slf4j日志记录的Spring Boot应用程序。Spring Boot and Logging

摇篮:

buildscript { 
    ext { 
     springBootVersion = '2.0.0.BUILD-SNAPSHOT' 
    } 
    repositories { 
     mavenCentral() 
     maven { url "https://repo.spring.io/snapshot" } 
     maven { url "https://repo.spring.io/milestone" } 
    } 
    dependencies { 
     classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}") 
    } 
} 

apply plugin: 'java' 
apply plugin: 'eclipse' 
apply plugin: 'org.springframework.boot' 
apply plugin: 'io.spring.dependency-management' 

dependencies { 
    compile fileTree(dir: 'lib', include: '*.jar') 
    compile group: 'com.google.guava', name: 'guava', version: '17.0' 

    // Spring 
    compile 'org.springframework.boot:spring-boot-starter-web:1.5.1.RELEASE' 
    compile group: 'org.springframework.boot', name: 'spring-boot-starter-parent', version: '1.5.1.RELEASE' 

    // Spring Security 
    compile 'org.springframework.boot:spring-boot-starter-security' 

    // Template engine 
    compile 'org.springframework.boot:spring-boot-starter-thymeleaf:1.5.1.RELEASE' 
    compile 'org.thymeleaf.extras:thymeleaf-extras-springsecurity3:2.1.2.RELEASE' 
    compile group: 'org.thymeleaf', name: 'thymeleaf-spring5', version: '3.0.3.M1' 

    // DB and ORM 
    compile 'org.springframework.boot:spring-boot-starter-data-jpa:1.5.1.RELEASE' 
    compile 'org.apache.derby:derby:10.13.1.1' 

    // Form validation 
    compile 'org.hibernate:hibernate-validator:5.2.2.Final' 
    compile 'javax.el:el-api:2.2' 

    // SNMP 
    compile 'org.snmp4j:snmp4j:1.10.1' 
    compile 'org.snmp4j:snmp4j-agent:1.2' 

    testCompile('org.springframework.boot:spring-boot-starter-test') 
} 

类:

import org.slf4j.Logger; 
import org.slf4j.LoggerFactory; 

..... 

@SpringBootApplication 
public class MyApplication { 

    private static final Logger LOGGER = LoggerFactory.getLogger(MyApplication.class); 

    public static void main(String[] args) { 
     SpringApplication.run(new Class<?>[] {MyApplication.class}, args); 

..... 

它之前的工作。现在我在创建Logger的时候有例外。我没有改变任何东西,只是试图再次建立项目。也许Spring Boot版本发生了变化,我不知道。

Exception in thread "main" java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory 
    at by.virkom.MyApplication.<clinit>(MyApplication.java:18) 
Caused by: java.lang.ClassNotFoundException: org.slf4j.LoggerFactory 
    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) 
    ... 1 more 

我试图排除spring-boot-starter-logging并连接 spring-boot-starter-log4j但它不是为我工作。然后用Log4j处理ClassNotFoundException。我该如何解决它?

PS:当我评论创建记录器,我还有一个例外:

Exception in thread "main" java.lang.NoClassDefFoundError: org/springframework/boot/SpringApplication 
    at by.virkom.MyApplication.main(MyApplication.java:22) 
Caused by: java.lang.ClassNotFoundException: org.springframework.boot.SpringApplication 
    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) 
    ... 1 more 
+0

首先尝试将所有'org.springframework.boot:弹簧引导xxx'依赖于相同的版本。其次使用发布的版本,例如'1.5.3.RELEASE'而不是'BUILD-SNAPSHOT'。 – diginoise

+0

现在我使用'1.5.3.RELEASE'版本,但问题没有解决 – Virkom

回答

0

添加到您的gradle这个文件:

compile group: 'org.apache.logging.log4j', name: 'log4j-api', version: '2.5' 
compile group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.5' 
compile group: 'org.apache.logging.log4j', name: 'log4j-slf4j-impl', version: '2.5' 
+0

谢谢,但是这没有解决我的问题。我有同样的例外。 'java.lang.NoClassDefFoundError:org/apache/log4j/Logger' – Virkom

0

您必须添加slf4j记录仪的实现像的logback

将以下内容添加到您的Gradle版本

compile 'ch.qos.logback:logback-classic:1.1.7'

+0

谢谢,但它不适用于我。我不知道如何解决它。 – Virkom

0

你有两个选择:

  1. 如果你的应用程序是一个Web应用程序,添加spring-boot-starter-web作为依赖和所有日志记录的依赖将增加。
  2. 如果您的应用程序不是web应用程序,请将spring-boot-starter-logging作为依赖项添加。

来源:https://docs.spring.io/spring-boot/docs/current/reference/html/howto-logging.html

+0

是的,它的web应用程序。并且我有'spring-boot-starter-web'依赖。但现在不行。最近六个月的日志记录没问题。也许是因为我改变了gradle版本。 – Virkom