java - Log4J2不输出调试信息

标签 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

最佳答案

您的 log4j2 配置文件似乎没有被使用。如果没有 log4j2 配置,默认情况下,Root Logger 会打印 ERROR 级别日志,这就是您的情况。

您的 log4j2 配置文件必须放置在应用程序的直接classpath 中,并且文件名称必须为 log4j2.xml。如果是maven项目,你的文件应该放在/src/main/resources/log42.xml

关于java - Log4J2不输出调试信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50216893/

相关文章:

java - Android制作一个progressDialog ProgressBar Invisible

java - 无法定位静态元模型字段

windows和linux的java语法文件区别

java - 使用 Log4j2 在 MySQL 中获取语法错误(XML 配置)

java - Log4j2 配置 - 找不到 log4j2 配置文件

java - 如何在 spring-boot-admin 中显示日志文件?

java - 反序列化时在 Jackson 中为 JODA 配置日期时间格式

java - 在 Spring boot 中动态配置 DataSourceBuilder url

logging - JndiLookup.class 仍然是 log4j-core-2.17.0.jar 的一部分,这是预期的吗?

log4j2 - Websphere 自由 : How to specify log4j2 configuration location?