我已经安装了log4j2并设置了属性文件,但我无法将log4j2输出调试信息发送到控制台。我怀疑我的配置是错误的。
这是我的源代码:
package com.smt.trimble.poc;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class NMEAReader {
private static final String hostName = "192.168.0.2";
private static final int portNumber = 5017;
private static Socket nmeaSocket;
private static final Logger logger = LogManager.getLogger(NMEAReader.class);
public static void main(String[] args) {
try {
nmeaSocket = new Socket(hostName, portNumber);
logger.debug("Creating socket");
PrintWriter out = new PrintWriter(nmeaSocket.getOutputStream(), true);
BufferedReader in =
new BufferedReader(new InputStreamReader(nmeaSocket.getInputStream()));
String userInput;
while (true) {
logger.debug("Reading Data");
userInput = in.readLine();
out.println(userInput);
System.out.println("echo: " + in.readLine());
}
} catch (Exception e){
System.out.println("An error occured, " + e.getMessage());
}
}
}
这是我的log4j2配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
</Appenders>
<Loggers>
<Root level="Debug">
<AppenderRef ref="Console"/>
</Root>
</Loggers>
Log4J2正常工作,因为当我将logger.debug
设置为logger.error
时,我能够看到输出。
我可能错过了一些微不足道的事情。
编辑:
我已将我的属性文件更新为
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="trace">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-level %logger{36} - %msg%n"/>
<Filters>
<ThresholdFilter level="debug"/>
</Filters>
</Console>
</Appenders>
<Loggers>
<Root level="Debug">
<AppenderRef ref="Console"/>
</Root>
</Loggers>
</Configuration>
将配置级别更改为跟踪也不会产生任何进一步的输出。不过,当我将logger.debug
更改为logger.error
时,我可以看到log4j2输出:
但是当我把东西设置为logger.debug时没什么。
答案 0 :(得分:1)
您的log4j2
配置文件似乎未被使用。如果没有log4j2
配置,默认情况下,Root Logger
会打印ERROR
级别日志,这就是您的情况。
您的log4j2
配置文件必须放在应用程序的直接classpath
中,文件名必须为log4j2.xml
。如果是maven项目,则您的文件应放在/src/main/resources/log42.xml
答案 1 :(得分:0)
您应该在Loggers标记内添加一个级别为“ trace”的Logger。您在Loggers标记内的代码将如下所示:
<Loggers>
<Root level="Debug">
<AppenderRef ref="Console"/>
</Root>
<Logger name="com.smt.trimble.poc" level="trace"></Logger>
</Loggers>
我也更喜欢Root level =“ info”。它完成了工作。