我尝试使用以下文件配置log4j2:
# 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
但是当我运行我的主课时,它并没有记录任何东西。这是我使用的代码片段:
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并尽我所知地实施了它,但我找不到让它发挥作用的方法。
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?
答案 0 :(得分:1)
以下是使一切正常运行的配置:
我缺少使用appender的记录器配置:
logger.file.name = MyProject
logger.file.level = info
logger.file.appenderRef.file.ref = File
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
。如果你添加它,你会看到什么?