使用BasicConfigurator.configure();
进行配置会在调试时设置一个基本的控制台appender。使用上述设置并且没有其他代码(测试除外)的项目应在控制台中生成三行日志记录。除了“它适用于我”之外,我不能说任何其他的东西。
你是否试过用log4j和junit创建一个空项目,只有上面的代码并运行它?
而且,为了获得@Before
方法运行:
@Test
public void testname() throws Exception {
assertTrue(true);
}
编辑:
如果您同时运行多个测试,他们每个人都会在运行之前调用初始化。
在这种情况下,如果您有两个测试,第一个会有一个记录器,第二个测试会再次调用init,使其记录两次(尝试它) - 您应该在控制台中使用两个测试获得9行记录。
您可能想要使用注释为@BeforeClass
的静态init方法来避免这种情况。虽然这也发生在跨文件中,但您可能需要查看JUnit 4中的TestSuites文档。并且/或者在@AfterClass注释类中调用BasicConfigurator.resetConfiguration();
,以在每个测试类/测试套件后删除所有记录器。
此外,根记录器被重用,因此,如果您在早期运行的测试方法中设置根记录器的级别,它将保留此设置以便稍后运行的所有其他测试,即使它们位于不同的文件中。 (重置配置时不会发生)。
测试用例 - 这将导致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);
}
}
更改init方法减少了对例外六行:
@BeforeClass
public static void init() throws Exception
{
// Log4J junit configuration.
BasicConfigurator.configure();
}
你的问题可能是导致其他一些测试类或测试套件,根记录器的日志记录级别设置为ERROR,并且不重置。
你也可以通过重新设置的@BeforeClass方法,设置登录之前测试了这一点。
请注意,这些更改可能会中断其他测试用例的预期日志记录,直到它在所有位置都得到修复。我建议尝试一下如何在单独的工作区/项目中工作,以了解它是如何工作的。
您是否已经得到了答案?他们几乎解释了所有可能的解决方案,因此无论是谁帮助,这都会很有趣。 – user357206 2010-09-02 07:52:31