请记住,您使用 OpenEJB 记录器获得的覆盖能力适用于系统属性以及 InitialContext 属性。
该openejb.logger.external
属性的真正目标是集成 OpenEJB 的服务器,例如 Geronimo,它们使用不同的日志系统并需要对日志进行高级控制。它不是为常用而设计的,因为启用了此选项并且没有采取其他步骤,您不会获得任何类型的日志记录,甚至不会出现错误,也不会获得有关失败部署的信息。即使正确使用仍然会禁用下面讨论的所有选项。
如果希望在测试中加入或退出日志记录配置,有很多方法可以做到这一点,而不会丢失 OpenEJB 提供的任何日志记录功能。
选项 1:在代码中通过 InitialContext 属性
在测试用例本身中通过 InitialContext 属性
Properties p = new Properties();
p.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.openejb.client.LocalInitialContextFactory");
p.put("log4j.rootLogger", "fatal,C");
p.put("log4j.category.OpenEJB", "warn");
p.put("log4j.category.OpenEJB.options", "warn");
p.put("log4j.category.OpenEJB.server", "warn");
p.put("log4j.category.OpenEJB.startup", "warn");
p.put("log4j.category.OpenEJB.startup.service", "warn");
p.put("log4j.category.OpenEJB.startup.config", "warn");
p.put("log4j.category.OpenEJB.hsql", "warn");
p.put("log4j.category.CORBA-Adapter", "warn");
p.put("log4j.category.Transaction", "warn");
p.put("log4j.category.org.apache.activemq", "error");
p.put("log4j.category.org.apache.geronimo", "error");
p.put("log4j.category.openjpa", "warn");
p.put("log4j.appender.C", "org.apache.log4j.ConsoleAppender");
p.put("log4j.appender.C.layout", "org.apache.log4j.SimpleLayout");
p.put("openejb.nobanner", "false");
Context context = new InitialContext(p);
选项 2:一个 jndi.properties 文件
文件必须位于任何评估为“/jndi.properties”的路径的类路径中,而不是“/META-INF/jndi.properties”
在 Maven 中,这可以通过将文件放在src/test/resources/jndi.properties
log4j.rootLogger = fatal,C
log4j.category.OpenEJB = warn
log4j.category.OpenEJB.options = warn
log4j.category.OpenEJB.server = warn
log4j.category.OpenEJB.startup = warn
log4j.category.OpenEJB.startup.service = warn
log4j.category.OpenEJB.startup.config = warn
log4j.category.OpenEJB.hsql = warn
log4j.category.CORBA-Adapter = warn
log4j.category.Transaction = warn
log4j.category.org.apache.activemq = error
log4j.category.org.apache.geronimo = error
log4j.category.openjpa = warn
log4j.appender.C = org.apache.log4j.ConsoleAppender
log4j.appender.C.layout = org.apache.log4j.SimpleLayout
openejb.nobanner = false
这是上述选项的一个简短视频。
请注意,查找和读取 jndi.properties 文件是java vm的一项功能,因此如果它不起作用,则更有可能是配置问题而不是 vm 错误。
选项 3:Maven Surefire 配置
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.5</version>
<configuration>
<systemPropertyVariables>
<log4j.rootLogger>fatal,C</log4j.rootLogger>
<log4j.category.OpenEJB>warn</log4j.category.OpenEJB>
<log4j.category.OpenEJB.options>warn</log4j.category.OpenEJB.options>
<log4j.category.OpenEJB.server>warn</log4j.category.OpenEJB.server>
<log4j.category.OpenEJB.startup>warn</log4j.category.OpenEJB.startup>
<log4j.category.OpenEJB.startup.service>warn</log4j.category.OpenEJB.startup.service>
<log4j.category.OpenEJB.startup.config>warn</log4j.category.OpenEJB.startup.config>
<log4j.category.OpenEJB.hsql>warn</log4j.category.OpenEJB.hsql>
<log4j.category.CORBA-Adapter>warn</log4j.category.CORBA-Adapter>
<log4j.category.Transaction>warn</log4j.category.Transaction>
<log4j.category.org.apache.activemq>error</log4j.category.org.apache.activemq>
<log4j.category.org.apache.geronimo>error</log4j.category.org.apache.geronimo>
<log4j.category.openjpa>warn</log4j.category.openjpa>
<log4j.appender.C>org.apache.log4j.ConsoleAppender</log4j.appender.C>
<log4j.appender.C.layout>org.apache.log4j.SimpleLayout</log4j.appender.C.layout>
<openejb.nobanner>false</openejb.nobanner>
</systemPropertyVariables>
</configuration>
</plugin>
选项4:任意组合
另请注意,上述所有技术都可以一次使用,包括您希望在单个测试用例中放置的任何覆盖。优先顺序如下:
- InitialContext 属性
- 类路径中的 jndi.properties
- 系统属性(在这种情况下,通过surefire设置)
- 类路径中的嵌入式.logging.properties
选项 5:请求功能
与往常一样,我们很高兴以任何方式让事情变得更容易。如果您有特定的需求或想法,我们很乐意尝试并在您想贡献的情况下帮助您完成它。