如何配置OpenEJB日志记录格式?这就是我现在在日志中看到的:
[...]
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.011 sec
Running com.XXX.FooTest
Apache OpenEJB 3.1.3 build: 20101015-05:42
http://openejb.apache.org/
INFO - openejb.home = /code/XXX
INFO - openejb.base = /code/XXX
INFO - Configuring Service(id=Default Security Serv...
[...]我想禁用INFO消息,并更改其他消息的格式。log4j.properties中的更改不起作用。
发布于 2010-11-25 17:42:46
这是我为了让事情正常工作所做的(在pom.xml中):
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.5</version>
<configuration>
<systemPropertyVariables>
<openejb.logger.external>true</openejb.logger.external>
</systemPropertyVariables>
</configuration>
</plugin>现在可以正常工作了。这是我的test/resources/jndi.properties
openejb.validation.output.level=VERBOSE
openejb.nobanner=false这是test/resources/log4j.properties
log4j.rootLogger=INFO, CONSOLE
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern = [%-5p] %c: %m\n
# OpenEJB levels
log4j.logger.OpenEJB=INFO
log4j.logger.OpenEJB.options=INFO
log4j.logger.OpenEJB.server=INFO
log4j.logger.OpenEJB.startup=INFO
log4j.logger.OpenEJB.startup.service=INFO
log4j.logger.OpenEJB.startup.config=INFO
log4j.logger.OpenEJB.hsql=INFO
log4j.logger.CORBA-Adapter=INFO
log4j.logger.Transaction=INFO
log4j.logger.org.apache.activemq=INFO
log4j.logger.org.apache.geronimo=INFO
# OpenJPA logging levels
log4j.logger.openjpa.Tool=WARN
log4j.logger.openjpa.Runtime=WARN
log4j.logger.openjpa.Remote=WARN
log4j.logger.openjpa.DataCache=WARN
log4j.logger.openjpa.MetaData=WARN
log4j.logger.openjpa.Enhance=WARN
log4j.logger.openjpa.Query=WARN
log4j.logger.openjpa.jdbc.SQL=WARN
log4j.logger.openjpa.jdbc.SQLDiag=WARN
log4j.logger.openjpa.jdbc.JDBC=WARN
log4j.logger.openjpa.jdbc.Schema=WARN现在,多亏了大卫的支持,我可以在测试期间对OpenEJB日志进行微调:)
发布于 2010-11-26 03:46:01
请记住,您使用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以下是上述选项的实际short video。
请注意,查找和读取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:任意组合
还要注意,上面的所有技术都可以一次使用,包括您希望放在单个测试用例中的任何覆盖。优先级顺序如下:
classpath
中的surefire)
选项5:请求功能
一如既往,我们非常乐意尽我们所能让事情变得更容易。如果你有一个特定的需求或想法,我们很乐意尝试并在你想要贡献的时候帮助你。
发布于 2010-11-14 18:09:43
根据Configuring Logging in Tests,您可以覆盖默认的日志记录配置:
通过在InitialContext创建时放置特定属性来创建
上提供embedded.logging.properties
这是推荐的方法。
或者,您可以禁用整个默认配置并提供您自己的配置:
您可以将"openejb.logger.external“设置为"true”作为系统属性(不能作为InitialContext属性使用)。然后,OpenEJB根本不会尝试配置日志记录,您可以使用Log4j的任何API直接配置日志记录。
https://stackoverflow.com/questions/4176924
复制相似问题