为什么log4j2没有在屏幕上打印任何东西?

时间:2016-10-31 23:00:23

标签: java logging log4j2

我尝试使用以下文件配置log4j2:

log4j2.properties

# Global logging settings
name = LoggingConfig
status = trace
dest = err

property.logDir = /logs/my_project
property.pattern = [%-level - %logger] %date{DEFAULT}%n Thread: %threadName%n%message%n

# stdout logger
appender.console.type = Console
appender.console.name = STDOUT
appender.console.layout.type = PatternLayout
appender.console.layout.pattern = ${pattern}

# File logger
appender.file.type = File
appender.file.name = File
appender.file.fileName = ${logDir}/api.log
appender.file.layout.type = PatternLayout
appender.file.layout.pattern = ${pattern}

# Root logger
rootLogger.level = trace
rootLogger.appenderRef.stdout.ref = STDOUT

此文件位于类路径中:src/main/resources/log4j2.properties

但是当我运行我的主课时,它并没有记录任何东西。这是我使用的代码片段:

MyProject.java

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

class MyProject {
    private static MyController controller;
    private static final Logger logger = LogManager.getLogger(MyProject.class);

    public static void main(String[] args) {
        ctrl = new MyController();
        // Start QuickFIX/J engine
        ctrl.start();

        logger.info("Controller started. Loading the API.");

        // Start Spring ...
    }

我阅读了official documentation并尽我所知地实施了它,但我找不到让它发挥作用的方法。

Gradle Dependencies

compile 'org.quickfixj:quickfixj-all:1.6.2'
compile 'org.apache.mina:mina-core:2.0.13'

compile ('org.springframework.boot:spring-boot-starter-web:1.3.3.RELEASE') {
    exclude module: 'spring-boot-starter-logging'
}
compile 'org.springframework.boot:spring-boot-starter-log4j2:1.4.1.RELEASE'

compile 'org.apache.logging.log4j:log4j-web:2.7'

compile 'org.hibernate:hibernate-core:5.2.1.Final'
compile 'org.postgresql:postgresql:9.4.1209'

问题

我配置和使用log4j2错了吗? 我的依赖项是否以某种方式搞砸了log4j2?

2 个答案:

答案 0 :(得分:1)

以下是使一切正常运行的配置:

log4j2.properties

我缺少使用appender的记录器配置:

logger.file.name = MyProject
logger.file.level = info
logger.file.appenderRef.file.ref = File

build.gradle依赖项

compile 'org.quickfixj:quickfixj-all:1.6.2'
compile 'org.apache.mina:mina-core:2.0.16'

compile ('org.springframework.boot:spring-boot-starter-web:1.3.5.RELEASE') {
    exclude module: 'spring-boot-starter-logging'
}

compile 'org.apache.logging.log4j:log4j-api:2.6'
compile 'org.apache.logging.log4j:log4j-core:2.6'
compile 'org.apache.logging.log4j:log4j-web:2.6'
compile 'org.apache.logging.log4j:log4j-slf4j-impl:2.6'

compile 'org.hibernate:hibernate-core:5.2.4.Final'
compile 'org.postgresql:postgresql:9.4.1209'

Spring Boot log4j2插件不适用于其他软件包。所以我删除了它并以声明方式添加了log4j2依赖项。这样Spring,Hibernate,Mina,QuickFIX / J等都可以正常登录。

注意:在回答这个问题时,Spring只与log4j2版本2.6及更低版本兼容,更高版本更改了API,Spring没有做出相应的更改爱好。

答案 1 :(得分:-1)

依赖性,您可以尝试添加log4j-api和log4j-core以确保版本与log4j-web依赖项的版本匹配。

您的配置看起来正确,但任何记录器都没有引用File appender,因此它不会接收任何事件。

我注意到配置有status=trace,这会导致Log4j初始化日志被打印到控制台。如果您没有看到,则问题出现在Log4j从配置文件初始化的位置。

要从头开始打开状态记录,请设置系统属性-Dorg.apache.logging.log4j.simplelog.StatusLogger.level=TRACE。如果你添加它,你会看到什么?