org.apache.log4j.在与arquillian的集成测试中未找到记录器类



我有以下问题:

环境:

  1. Weblogic 12.1.3
  2. MySQL
  3. Gradle
  4. Log4j

与Sharedlib:

-rwxrwxrwx   1 josediaz  staff     0B Jan 19 17:06 Readme.txt
drwxrwxrwx   2 josediaz  staff    68B Mar 31 20:48 build
-rwxr-xr-x   1 josediaz  staff   1.1K Jun 30 01:05 build.gradle
drwxrwxrwx   9 josediaz  staff   306B Jul  1 01:31 dao-ifz.jar
drwxrwxrwx  10 josediaz  staff   340B Jul  1 01:31 dao-imp.jar
drwxrwxrwx   5 josediaz  staff   170B Mar 31 20:48 dependencias
drwxrwxrwx   9 josediaz  staff   306B Jul  1 01:31 model.jar
drwxrwxrwx   9 josediaz  staff   306B Jul  1 01:31 service-ifz.jar
drwxrwxrwx   9 josediaz  staff   306B Jul  1 01:31 service-imp.jar
-rwxr-xr-x   1 josediaz  staff   578B Apr 27 23:02 settings.gradle
drwxrwxrwx  11 josediaz  staff   374B Jul  1 01:31 slb.ear
drwxr-xr-x  11 josediaz  staff   374B Jul  1 01:31 test.jar

我在我的sharedlib的dao-imp中有一个JPAPersonDAO,我使用log4j进行日志记录:

@Stateless
public class JPAPersonDAO implements PersonDAO {

    private static final Logger LOG = Logger.getLogger(JPAPersonDAO.class);
    @PersistenceContext(unitName = "persistence-unit")
    private EntityManager entityManager;

    @SuppressWarnings("unchecked")
    @Override
    public List<Person> findPersons(int startPosition, int maxResults, String sortFields, String sortDirections) {
        LOG.warn("warn");
        LOG.info("info");
        LOG.trace("trace");
        LOG.debug("debug");
        LOG.error("error");
        LOG.fatal("fatal");

        return entityManager
                .createNativeQuery("select * from person order by name limit " + startPosition + "," + maxResults,
                        Person.class)
                .getResultList();
    }

我的log4j.properties:

log4j.rootLogger=INFO, stdout, file
log4j.debug=true
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=[%d] %-5p %c %x - %m%n
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.File=/Users/josediaz/Projects/logs/logging_sharedlib.log
log4j.appender.file.Append = false
log4j.appender.file.layout = org.apache.log4j.PatternLayout
log4j.appender.file.MaxFileSize = 20000Kb
log4j.appender.file.MaxBackupIndex = 5
log4j.appender.file.layout.ConversionPattern=[%d] %-5p %c %x - %m%n

log4j.category.com.theserverlabs.blog.wls=DEBUG

当我部署我的sharedlib和其他EAR使用它时,日志生成没有问题。

问题

我添加了一个基于arquillian的集成测试的测试项目。

@RunWith(Arquillian.class)
public class NativeSqlTest {

    @Inject
    PersonDAO dao;
    @Deployment
    public static WebArchive createDeployment() {
        return ShrinkWrap.create(WebArchive.class)
                .addClasses(PersonDAO.class, JPAPersonDAO.class, Person.class, Profiled.class,
                        ProfilingInterceptor.class)
                .addAsWebInfResource("test-beans.xml", "beans.xml")
                .addAsResource("test-persistence.xml", "META-INF/persistence.xml");
    }
    /**
     * In the test, we're just going to invoke the only available operation in
     * the +EmployeeBean+ and assert a few details to confirm that the native
     * query was successfully executed.
     */
    @Test
    public void testNativeSql() {

        int result = dao.countPersons();
        assertTrue(result > 0);
    }
}

无论我是从IDE执行这个测试还是从终端调用gradle clean build,我都会得到以下错误:

org.jboss.arquillian.container.spi.client.container。DeploymentException: Deployment Failed on server: java.lang.ClassNotFoundException: org.apache.log4j.Logger

我做错了什么?

谢谢黄敏聪,你的建议很重要。我把它添加到我的部署. addpackages (true, "org.apache.log4j")中,测试通过了。

@Deployment
public static WebArchive createDeployment() {
    return ShrinkWrap.create(WebArchive.class, "testSharedlib.war")
            .addClasses(PersonDAO.class, JPAPersonDAO.class, Person.class, Profiled.class,
                    ProfilingInterceptor.class)
             .addPackages(true, "org.apache.log4j")
            .addAsResource("test-persistence.xml", "META-INF/persistence.xml")
            .addAsResource("log4j.xml")             
            .addAsWebInfResource("test-beans.xml", "beans.xml");
}

谢谢。

最新更新