Log4j输出未在Eclipse控制台中显示

jav*_*ert 25 java eclipse junit log4j

出于某种原因,当我运行JUnit测试时,我的Eclipse控制台不再显示Log4j INFO和DEBUG语句.在代码方面没有任何变化,所以它必须与Eclipse配置有关.

我在单元测试中所做的就是以下内容,由于某些原因,只有ERROR语句显示在Eclipse控制台中.为什么?我应该在哪里寻找线索?

public class SampleTest
{
   private static final Logger LOGGER = Logger.getLogger(SampleTest.class);

   @Before
   public void init() throws Exception
   {
       // Log4J junit configuration.
       BasicConfigurator.configure();

       LOGGER.info("INFO TEST");
       LOGGER.debug("DEBUG TEST");
       LOGGER.error("ERROR TEST");
   }
}
Run Code Online (Sandbox Code Playgroud)

细节:

  • 的log4j-1.2.6.jar
  • junit-4.6.jar Eclipse
  • IDE for Java Developers,Version:Helios Release,Build id:20100617-1415

小智 21

转到eclipse中的运行配置然后-VM参数添加:-Dlog4j.configuration = log4j-config_folder/log4j.xml

将log4j-config_folder替换为您拥有log4j.xml文件的文件夹结构

  • 将`-Dlog4j.debug`添加到此Eclipse启动配置的JVM参数中. (3认同)

Aar*_*lla 11

log4j.propertiesor log4j.xml文件中查找日志级别.它可能设置为ERROR而不是DEBUG

  • 将`-Dlog4j.debug`添加到您的VM环境启动属性中以使log4j打印出它的调试信息 - 可能在类路径上拾取了不同的log4j配置文件(例如捆绑在JAR中的一个)而不是您想要的那个 (12认同)

Tor*_*mod 9

配置用于BasicConfigurator.configure();设置在调试时设置的基本控制台appender.具有上述设置且没有其他代码(测试除外)的项目应在控制台中生成三行日志记录.我不能说"它对我有用".

您是否尝试使用log4j和junit创建一个空项目,只使用上面的代码并运行它?

另外,为了使@Before方法运行:

@Test
public void testname() throws Exception {
    assertTrue(true);
}
Run Code Online (Sandbox Code Playgroud)

编辑:

如果您一次运行多个测试,则每个测试都将在运行前调用init.

在这种情况下,如果您有两个测试,第一个将有一个记录器,第二个测试将再次调用init,使其记录两次(尝试) - 您应该在控制台中获得9行记录,并进行两次测试.

您可能希望使用带注释的静态init方法@BeforeClass来避免这种情况.虽然这也发生在文件中,但您可能希望查看JUnit 4中的TestSuite文档.和/或BasicConfigurator.resetConfiguration();在@AfterClass注释类中调用,以在每个测试类/测试套件之后删除所有记录器.

此外,根记录器可以重复使用,因此如果您在早期运行的测试方法中设置根记录器的级别,它将为稍后运行的所有其他测试保留此设置,即使它们位于不同的文件中也是如此.(重置配置时不会发生).

测试用例 - 这将导致9行日志记录:

import static org.junit.Assert.assertTrue;

import org.apache.log4j.BasicConfigurator;
import org.apache.log4j.Logger;
import org.junit.Before;
import org.junit.Test;

public class SampleTest
{
   private static final Logger LOGGER = Logger.getLogger(SampleTest.class);

   @Before
   public void init() throws Exception
   {
       // Log4J junit configuration.
       BasicConfigurator.configure();
   }

   @Test
    public void testOne() throws Exception {
       LOGGER.info("INFO TEST");
       LOGGER.debug("DEBUG TEST");
       LOGGER.error("ERROR TEST");

       assertTrue(true);
    }

   @Test
   public void testTwo() throws Exception {
       LOGGER.info("INFO TEST");
       LOGGER.debug("DEBUG TEST");
       LOGGER.error("ERROR TEST");

       assertTrue(true);
   }
}
Run Code Online (Sandbox Code Playgroud)

更改init方法减少到例外的六行:

@BeforeClass
public static void init() throws Exception
{
    // Log4J junit configuration.
    BasicConfigurator.configure();
}
Run Code Online (Sandbox Code Playgroud)

您的问题可能是在其他测试类或测试套件中导致的,其中根记录器的日志记录级别设置为ERROR,而不是重置.

您还可以在设置日志记录之前通过重置@BeforeClass方法来测试它.

请注意,这些更改可能会破坏其他测试用例的预期日志记录,直到在所有位置修复为止.我建议尝试在单独的工作区/项目中如何工作,以了解它是如何工作的.


Jon*_*man 6

有一点需要注意,如果类路径上有log4j.properties文件,则无需调用BasicConfigurator.此处提供了有关如何配置属性文件的说明.

您可以通过在类路径上使用log4j.jar和log4j.properties从命令行运行此类来查明IDE是否导致此问题.