Log4J2不输出调试信息

时间:2018-05-07 14:43:16

标签: java log4j2

我已经安装了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输出:

enter image description here

但是当我把东西设置为logger.debug时没什么。

enter image description here

2 个答案:

答案 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”。它完成了工作。