spring-boot - 更改 JHipster 以使用 log4j2

标签 spring-boot jhipster

我构建了一个示例 Jhipster 应用程序。我想做的第一件事就是更改默认日志记录以使用 log4j2。

我已更新应用程序的 spring-boot 属性以指向版本 1.2.0 M2。

环顾四周,我发现了一些排除 logback 并包含 log4j2 的方法示例,但我没有取得太大进展。我已经设法包含 log4j2 但它仍然找到对 logback 的引用。我相信我可能需要更改 jhipster 为我生成的一些样板代码,但在尝试立即学习很多东西时,我不确定最好的方法。

这是我的 gradle 文件的一部分,我在其中尝试排除日志记录(根据我所做的其他谷歌搜索),并插入了 log4j2:

compile group: 'com.mattbertolini', name: 'liquibase-slf4j', version: liquibase_slf4j_version
compile group: 'org.springframework.boot', name: 'spring-boot-actuator', version: spring_boot_version
compile group: 'org.springframework.boot', name: 'spring-boot-starter-log4j2', version:spring_boot_version
compile group: 'org.springframework.boot', name: 'spring-boot-autoconfigure', version: spring_boot_version
compile group: 'org.springframework.boot', name: 'spring-boot-loader-tools', version: spring_boot_version
compile group: 'org.springframework.boot', name: 'spring-boot-starter-aop', version: spring_boot_version
compile group: 'org.springframework.boot', name: 'spring-boot-starter-data-jpa', version: spring_boot_version
compile group: 'org.springframework.boot', name: 'spring-boot-starter-security', version: spring_boot_version
compile group: 'org.springframework.boot', name: 'spring-boot-starter-tomcat', version: spring_boot_version
compile(group: 'org.springframework.boot', name: 'spring-boot-starter-web', version: spring_boot_version) {
    exclude (module: 'spring-boot-starter-logging')
    exclude (module: 'spring_boot-starter-tomcat')
}
compile group: 'org.springframework.boot', name: 'spring-boot-starter-tomcat', version: spring_boot_version
compile group: 'org.springframework.boot', name: 'spring-boot-starter-thymeleaf', version: spring_boot_version
compile group: 'org.springframework.cloud', name: 'spring-cloud-cloudfoundry-connector', version: spring_cloud_version
compile group: 'org.springframework.cloud', name: 'spring-cloud-spring-service-connector', version: spring_cloud_version
compile group: 'org.springframework.cloud', name: 'spring-cloud-localconfig-connector', version: spring_cloud_version
compile(group: 'org.springframework', name: 'spring-context-support') {
    exclude(module: 'quartz')
}

这样做时,当我尝试启动我的应用程序时,我遇到了一些奇怪的错误:

SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/C:/Users/sssn/.gradle/caches/modules-2/files2.1/org.apache.logging.log4j/log4j-slf4j-impl/2.0.2/f2cc4647e51810c3dd11df832229fac01d41aa51/log4j-slf4j-impl-2.0.2.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/C:/Users/sssn/.gradle/caches/modules-2/files-2.1/ch.qos.logback/logback-classic/1.1.2/b316e9737eea25e9ddd6d88eaeee76878045c6b2/logback-classic-1.1.2.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory]
Exception in thread "main" java.lang.IllegalArgumentException: LoggerFactory is not a Logback LoggerContext but Logback is on the classpath. Either remove Logback or the competing implementation (class org.apache.logging.slf4j.Log4jLoggerFactory loaded from file:/C:/Users/jmcgaffigan/.gradle/caches/modules-2/files-2.1/org.apache.logging.log4j/log4j-slf4j-impl/2.0.2/f2cc4647e51810c3dd11df832229fac01d41aa51/log4j-slf4j-impl-2.0.2.jar). Object of class [org.apache.logging.slf4j.Log4jLoggerFactory] must be an instance of class ch.qos.logback.classic.LoggerContext

如果有人有任何提示或建议“尝试一下”,我们将不胜感激。

更新: 运行 gradle 依赖项始终显示通过 boot-start-aop 包传入的日志记录:

+--- org.springframework.boot:spring-boot-starter-aop:1.2.0.M2
|    +--- org.springframework.boot:spring-boot-starter:1.2.0.M2
|    |    +--- org.springframework.boot:spring-boot:1.2.0.M2 (*)
|    |    +--- org.springframework.boot:spring-boot-autoconfigure:1.2.0.M2 (*)
|    |    +--- org.springframework.boot:spring-boot-starter-logging:1.2.0.M2
|    |    |    +--- org.slf4j:jcl-over-slf4j:1.7.7
|    |    |    |    \--- org.slf4j:slf4j-api:1.7.7
|    |    |    +--- org.slf4j:jul-to-slf4j:1.7.7
|    |    |    |    \--- org.slf4j:slf4j-api:1.7.7
|    |    |    +--- org.slf4j:log4j-over-slf4j:1.7.7
|    |    |    |    \--- org.slf4j:slf4j-api:1.7.7
|    |    |    \--- ch.qos.logback:logback-classic:1.1.2
|    |    |         +--- ch.qos.logback:logback-core:1.1.2
|    |    |         \--- org.slf4j:slf4j-api:1.7.6 -> 1.7.7
|    |    +--- org.springframework:spring-core:4.1.1.RELEASE (*)
|    |    \--- org.yaml:snakeyaml:1.13
|    +--- org.springframework:spring-aop:4.1.1.RELEASE (*)
|    +--- org.springframework:spring-core:4.1.1.RELEASE (*)
|    +--- org.aspectj:aspectjrt:1.8.2
|    \--- org.aspectj:aspectjweaver:1.8.2
+--- org.springframework.boot:spring-boot-starter:1.2.0.M2 (*)

我尝试过对 starter-aop 和 start 包进行排除,但仍然没有成功。

最佳答案

如果您想使用依赖项排除,那么为了成功排除某些内容,需要将排除应用于每个依赖于您尝试排除的模块的依赖项。这很快就会变得难以处理——您需要声明几乎所有 Spring Boot 依赖项的排除。

更好的选择是将排除应用于整个配置:

configurations {
    compile.exclude group: 'org.springframework.boot', module: 'spring-boot-starter-logging'
}

甚至每个配置:

configurations {
    all*.exclude group: 'org.springframework.boot', module: 'spring-boot-starter-logging'
}

关于spring-boot - 更改 JHipster 以使用 log4j2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26872859/

相关文章:

java - 在运行时观察 application.properties 的变化 Spring boot

java - Spring Boot中update方法的实现

date - JHipster JDL 中的 Instant 是什么?

java - JHipster 按实体字段搜索实体

angularjs - 无法从 jhipster 生成的实体获得一对多(所有者 -> 汽车)链接

eclipse-plugin - 如何从 Eclipse 中触发 Liquibase

java - 来自属性文件中资源的 Spring Boot 引用文件位置

java - 如何使用 Hibernate 在 Spring Boot 中处理数据库迁移?

spring-boot - Spring-Integration:异常时未发送 Tcp 服务器响应

java - JHipster 错误 : Could not find or load main class org. apache.maven.wrapper.MavenWrapperMain