我一直在尝试通过Spring项目中的log4j2.xml使日志记录与基本配置一起使用。试了两天没有运气。该项目似乎忽略了我的log4j2.xml文件,并选择了默认配置。

这就是我一直在做的:

  • 创建log4j2.xml并将其添加到类路径。配置如下。
  • 确保此xml文件是Deployment Assembly的一部分,希望可以将其提取为
  • 解压缩生成的war文件,以查看该文件是否正在作为部署的一部分添加...是的。

  • 没有人帮助。我在StackOverflow上查找了一些有关此类问题的帖子,但其中大多数提到我们要做的就是将文件添加到classpath中。但就我而言,只有默认配置才是我运行该应用程序时看到的 Activity 配置。确切地说,尽管下面的配置显示“info”,但语句log.info("Inside foo()");不会打印该消息。当我进入时,我看到未启用“信息”级别日志。

    任何帮助将不胜感激。

    ==================

    log4j2.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <configuration status="INFO">
        <appenders>
            <Console name="Console" target="SYSTEM_OUT">
                <PatternLayout pattern="[%d{ISO8601}] [%t] %-5p %c{6} - %msg%n"/>
            </Console>
            <File name="File" fileName="example.log">
                <PatternLayout pattern="[%d{ISO8601}] [%t] %-5p %c{6} - %msg%n"/>
            </File>
        </appenders>
        <loggers>
            <logger name="com.mypackage" level="info" additivity="false">
                <appender-ref ref="Console"/>
                <appender-ref ref="File"/>
            </logger>
            <root level="info">
                <appender-ref ref="Console"/>
            </root>
        </loggers>
    </configuration>
    

    我的gradle构建脚本中的依赖关系:
    def tomcatVersion = '7.0.42'
    tomcat "org.apache.tomcat.embed:tomcat-embed-core:${tomcatVersion}",
    "org.apache.tomcat.embed:tomcat-embed-logging-juli:${tomcatVersion}"
    tomcat("org.apache.tomcat.embed:tomcat-embed-jasper:${tomcatVersion}") {
        exclude group: 'org.eclipse.jdt.core.compiler', module: 'ecj'
    }
    
    compile group: 'commons-collections', name: 'commons-collections', version: '3.2'
    compile group: 'com.datastax.cassandra', name: 'cassandra-driver-core', version:'1.0.3'
    //compile group: 'com.yammer.metrics', name: 'metrics-core', version:'2.2.0'
    compile 'org.springframework:spring-core:3.2.3.RELEASE'
    compile 'org.springframework:spring-webmvc:3.2.3.RELEASE'
    compile 'org.springframework.security:spring-security-web:3.2.0.RELEASE'
    compile 'org.springframework.security:spring-security-core:3.2.0.RELEASE'
    compile 'org.springframework.security:spring-security-config:3.2.0.RELEASE'
    compile 'org.springframework.hateoas:spring-hateoas:0.7.0.RELEASE'
    
    providedCompile 'javax.servlet:javax.servlet-api:3.0.1'
    
    runtime 'com.fasterxml.jackson.core:jackson-core:2.2.2'
    runtime 'com.fasterxml.jackson.core:jackson-databind:2.2.2'
    runtime 'javax.xml.bind:jaxb-api:2.2.9'
    
    compile 'org.apache.logging.log4j:log4j-jcl:2.0-rc1'
    runtime 'org.apache.logging.log4j:log4j-jcl:2.0-rc1'
    

    //编译'org.slf4j:slf4j-api:1.7.5'
    //运行时'org.slf4j:slf4j-jdk14:1.7.5'
    testCompile group: 'junit', name: 'junit', version: '4.+'
    testCompile 'org.springframework:spring-test:3.2.3.RELEASE'
    testCompile "org.mockito:mockito-all:1.9.5"
    

    最佳答案

    您需要在类路径中有log4j2 api jar和log4j2核心jar,以及log4j2.xml文件。如果在类路径中找不到核心jar或log4j2.xml,则log4j2将自动配置为默认配置,该默认配置仅将错误级别的消息输出到控制台。

    尝试从您的应用程序中打印此代码,以查看必要的jar是否在类路径中:

    //api
    System.out.println(org.apache.logging.log4j.Logger.class.getResource("/org/ap‌​ache/logging/log4j/Logger.class"));
    //core
    System.out.println(org.apache.logging.log4j.Logger.class.getResource("/org/ap‌​ache/logging/log4j/core/Appender.class"));
    //config
    System.out.println(org.apache.logging.log4j.Logger.class.getResource("/log4j2.xml"));
    

    10-07 19:03
    查看更多