如何配置OpenEJB日志记录?

如何配置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更改无效。

请记住,使用OpenEJB记录器获得的覆盖能力适用于系统属性以及InitialContext属性。

openejb.logger.external属性实际上是针对集成OpenEJB的服务器,例如Geronimo,他们使用不同的日志系统并需要对日志记录进行高级控制。 它不是为常用而设计的,因为启用了此选项并且没有采取其他步骤,您没有任何类型的日志记录 ,甚至没有ERROR,也没有关于失败部署的信息。 即使正确使用仍将禁用下面讨论的所有选项。

如果希望将测试配置输入或输出测试,可以通过多种方式完成测试,而不会丢失OpenEJB提供的任何日志记录function。

选项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 

以下是上述选项的简短video 。

请注意,查找和读取jndi.properties文件是java vm的一项function,因此如果它不起作用,则更有可能是配置问题而不是vm错误。

选项3:Maven Surefire配置

  org.apache.maven.plugins maven-surefire-plugin 2.5   fatal,C warn warn warn warn warn warn warn warn warn error error warn org.apache.log4j.ConsoleAppender org.apache.log4j.SimpleLayout false    

选项4:任何组合

另请注意,所有上述技术都可以一次使用,包括您希望在各个测试用例中添加的任何覆盖。 优先顺序如下:

  1. InitialContext属性
  2. 类路径中的jndi.properties
  3. 系统属性(在这种情况下,通过surefire设置)
  4. classpath中的embedded.logging.properties

选项5:申请function

一如既往,我们非常乐意以任何方式让事情变得更轻松。 如果您有特定的需求或想法,我们很乐意尝试使用它,或者如果您想要贡献,可以帮助您实现它。

这是我为使事情正常工作所做的(在pom.xml ):

  org.apache.maven.plugins maven-surefire-plugin 2.5   true    

现在工作正常。 这是我的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的日志记录,感谢大卫的支持:)

根据配置测试记录 ,您可以覆盖默认的日志记录配置:

  • 通过在InitialContext创建时添加特定属性〜或〜
  • 通过在类路径上提供embedded.logging.properties

这是推荐的方法。

作为替代方案,您可以禁用整个默认配置并提供自己的配置:

您可以将“openejb.logger.external”设置为“true”作为系统属性(不能用作InitialContext属性)。 然后OpenEJB根本不会尝试配置日志记录,您可以使用任何API直接使用Log4j配置日志记录; xml,属性或代码。

如果您不介意使用其他日志记录框架,这些链接可能会很有用。

http://hwellmann.blogspot.fi/2012/11/logging-with-slf4j-and-logback-in.html

JUL到SLF4J大桥

不要在这种方法中使用openejb.logger.external=true 。 请参阅http://grepcode.com/file/repo1.maven.org/maven2/org.apache.openejb/openejb-core/3.0/org/apache/openejb/util/JuliLogStreamFactory.java