当前位置: 首页 > 知识库问答 >
问题:

Spring引导中的Log4j2没有使用XML文件中的模式

百里疏珂
2023-03-14

我有一个spring boot项目,以下是我使用记录器的方式:

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

class MyController{    
  private static final Logger log = LogManager.getLogger(MyController.class);

  public void do(){
   log.error("test");
  }    
}

和src/main/resources/log4j2.xml

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="INFO">
    <Appenders>
        <Console name="console" target="SYSTEM_OUT">
            <PatternLayout pattern="-- %msg%n --" />
        </Console>
    </Appenders>
    <Loggers>
        <Root level="debug" additivity="false">
            <AppenderRef ref="console" />
        </Root>
    </Loggers>
</Configuration>

这是我在控制台中看到的:

2019-09-10 11:04:08.818错误21680---[nio-8081-exec-2]com.ey.web.MyController: testtestBLI

如何强制log4j2使用xml文件?

分级文件:

// hot deploy config https://stackoverflow.com/a/52070831/982234
plugins {
    id 'org.springframework.boot' version '2.1.5.RELEASE'
    id 'java'
    id 'io.spring.dependency-management' version '1.0.1.RELEASE'

}

apply plugin: 'io.spring.dependency-management'
apply plugin: 'idea'

group = 'com.tt'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'

repositories {
    mavenCentral()
}
sourceSets.main.java.srcDirs += "${buildDir}/generated"

compileJava {
    options.annotationProcessorGeneratedSourcesDirectory = file("${buildDir}/generated")
}

dependencyManagement {
    imports {
        mavenBom 'org.apache.logging.log4j:log4j-bom:2.12.1'
    }
}
configurations.all {
    exclude group: 'org.slf4j', module: 'slf4j-log4j12'
}
dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-data-rest'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'

    compile group: 'org.springframework.security.oauth', name: 'spring-security-oauth2', version: '2.3.6.RELEASE'
    compile 'io.jsonwebtoken:jjwt-api:0.10.5'
    runtime 'io.jsonwebtoken:jjwt-impl:0.10.5'
    runtime 'io.jsonwebtoken:jjwt-jackson:0.10.5'

    compile group: 'com.pipl.api', name: 'piplapis', version: '5.0.11'
    compile project('system')
    compile 'org.apache.httpcomponents:httpclient:4.5'
    compile("org.springframework.boot:spring-boot-devtools")

    compile "org.springframework.boot:spring-boot-starter-data-jpa:2.0.5.RELEASE"
    compile "mysql:mysql-connector-java:5.1.47"
    compile group: 'org.hibernate', name: 'hibernate-core', version: '5.4.4.Final'

    annotationProcessor("javax.xml.bind:jaxb-api")
    annotationProcessor("org.hibernate:hibernate-jpamodelgen")

    compile group: 'org.jboss.logging', name: 'jboss-logging', version: '3.4.1.Final'

    compile 'com.google.cloud:google-cloud-storage:1.89.0'



    compile group: 'org.apache.logging.log4j', name: 'log4j-api', version: '2.12.1'
    compile group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.12.1'


    compile group: 'org.apache.commons', name: 'commons-lang3', version: '3.9'
}

共有1个答案

薛阳荣
2023-03-14

您需要在main方法内指定log4j2上下文(我猜在您的情况下,在日志记录之前在do()内):

LoggerContext context = (org.apache.logging.log4j.core.LoggerContext) LogManager.getContext(false);
File log4configFile = new File(log4j2configFilename);  
context.setConfigLocation(log4configFile.toURI());

其中log4j2confiFilename是设置文件的路径。如果您正确地将该文件夹标记为资源文件夹(默认),它应该只是

String log4j2configFilename = "log4j2.xml";

如果不起作用,请尝试:

String log4j2configFilename = "src/main/resources/log4j2.xml";

编辑:

您没有排除正确的模块。在你的gradle文件中,你必须替换

exclude group: 'org.slf4j', module: 'slf4j-log4j12'

具有

exclude group: 'org.apache.logging.log4j', module: 'log4j-to-slf4j'

可能发生的情况是,该模块仍然处于从属关系中,因为它以前包含过。为了彻底摆脱它,你必须管理图书馆。

关于IntelliJ IDEA:is文件

希望我能帮忙。

 类似资料:
  • 我试图在spring boot应用程序中添加log4j2框架,并使用spring AOP将日志记录问题与逻辑业务分离开来。不幸的是,当我尝试记录消息时,log4j2不起作用,它使用spring默认的日志记录。 这是我的LoggingAspect类,我尝试在其中记录消息:LoggingAspect。JAVA 这是我的pom。xml文件: 最后这是我的log4j2。xml文件: 当我尝试使用logge

  • 我想使用新的log4j2-Java日志框架。一切正常,但我从一小时后就尝试加载一个自定义配置文件来配置日志记录(如日志级别)。 这是我的log4j2.xml: 我尝试了以下方法,但没有任何效果: 移动log4j2.xml文件,使其位于默认包中。 将log4j2.xml文件移动到项目中的任意位置 将log4j2.xml文件命名为log4j.xml 在项目中创建一个文件夹,将log4j2.xml文件放

  • 我已经调试了一整天,几乎尝试了互联网上所说的所有方法,但我仍然没有正确理解。 我使用Spring Boot和log4j2进行日志记录,因为我希望将日志写入文件而不是控制台。当我启动Spring Boot时,日志文件被成功创建,但我看不到文件上写着“Hello Philippine”。我希望你们能帮我。 这是我的Spring Boot应用程序: 我的log4j2。xml 我的POM: 我的申请表上没

  • 问题内容: 在Spring 4或Spring Boot中,有没有办法在没有xml的情况下初始化EhCache? 我注意到Spring Boot 1.0.0.RC3没有任何ehcache依赖项,但是Spring 4.0GA发行版中 提到它改进了对EhCache的支持。而且,Spring 3拥有类,但是它不再是依赖项的一部分。 编辑: Spring 4确实具有EhCache支持。您必须添加依赖项: E

  • 在Spring 4或Spring Boot中,有没有一种不用xml初始化EhCache的方法? 我注意到Spring Boot1.0.0.RC3没有任何ehcache依赖项,但是Spring 4.0GA发布帖子提到它改进了对EhCache的支持。此外,Spring 3有类,但这不再是依赖项的一部分。 编辑:Spring 4确实有EhCache支持。您必须添加依赖项: Edit2:我试过以下方法,我

  • 我有一个简单的Spring Boot应用程序(在STS中创建为“starter project”)。我使用log4j2进行日志记录 无论我尝试什么,我都没有在交换中看到任何消息;我只在控制台中看到它们。 我成功地将log4j(1)与旧版本的org.springframework.amqp:spring-rabbit:1.5.6 AmqpAppender(org.springframework.am