gpt4 book ai didi

java - 如何配置 OpenEJB 日志记录?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:39:25 28 4
gpt4 key购买 nike

如何配置 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,它们使用不同的日志记录系统并且需要对日志记录进行高级控制。它不是为常用而设计的,因为启用此选项且未采取其他步骤,您将没有记录任何类型的日志,甚至没有错误,也没有有关失败部署的信息。即使使用正确,仍会禁用下面讨论的所有选项。

如果希望在测试中获取日志配置或从测试中获取日志配置,有很多方法可以在不丢失 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:任意组合

另请注意,可以同时使用上述所有技术,包括您希望在单个测试用例中放置的任何覆盖。优先顺序如下:

  1. InitialContext 属性
  2. 类路径中的 jndi.properties
  3. 系统属性(在本例中,通过 surefire 设置)
  4. 在类路径中嵌入.logging.properties

选项 5:请求功能

一如既往,我们非常乐意尽我们所能让事情变得更简单。如果您有特定的需求或想法,我们很乐意尝试将其付诸实践,或者如果您想做出贡献,我们会帮助您实现。

关于java - 如何配置 OpenEJB 日志记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4176924/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com