Java 如何配置OpenEJB日志记录?

Java 如何配置OpenEJB日志记录?,java,openejb,Java,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 - o

如何配置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.属性的更改不起作用。

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

  • 通过在
    InitialContext
    creation time~或~
  • 通过在类路径上提供
    embedded.logging.properties
这是推荐的方法

或者,您可以禁用整个默认配置,并提供自己的:

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


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

这是
test/resources/log4j.properties

openejb.validation.output.level=VERBOSE
openejb.nobanner=false
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

现在,由于David的支持,我可以在测试期间对OpenEJB的日志进行微调:)

请记住,OpenEJB记录器的覆盖功能可以与系统属性以及InitialContext属性一起工作

expndtw-1\cf1\cf1\cf1\cf1\cf1\cf1\cf1\cf1\cf1\cf1\cf1\cf1\cf1\cf1\cf1\cf1\cf1\cf1\cf1\cf1\cf1\cf1\cf1\cf1\cf1\cf1\cf1\cf1\cf1\。它不是为通用而设计的,因为启用了此选项并且没有采取任何其他步骤,您将获得任何类型的日志记录,甚至没有错误,也没有关于部署失败的信息。即使正确使用,仍将禁用下面讨论的所有选项

如果希望在测试中输入或输出日志记录配置,有很多方法可以在不丢失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文件是的一项功能,因此,如果它不起作用,则更有可能是配置问题,而不是vm错误

选项3:Maven Surefire配置

org.apache.maven.plugins
maven surefire插件
2.5
致命的
警告
警告
警告
警告
警告
警告
警告
警告
警告
错误
错误
警告
org.apache.log4j.ConsoleAppender
org.apache.log4j.SimpleLayout
假的
备选案文4:任何组合 还请注意,可以同时使用上述所有技术,包括您希望在单个测试用例中使用的任何重写。优先顺序如下:

  • InitialContext属性
  • 类路径中的jndi.properties
  • 系统属性(在这种情况下,通过surefire进行设置)
  • 类路径中的embedded.logging.properties
  • 选项5:请求功能
    和往常一样,我们非常高兴能以任何方式让事情变得更容易。如果您有特定的需求或想法,我们很乐意尝试使用它,或者在您希望提供帮助的情况下帮助您完成。

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


    不要在这种方法中使用
    openejb.logger.external=true
    。请参阅

    所有方法都不起作用:(我可以在哪里“将openejb.logger.external设置为true?”?在哪个文件中?我正在使用
    jndi.properties
    。没有效果:(@Vincenzo:嗯,事实上,我不能像我预期的那样工作。也许我误解了什么。我需要挖掘一下。@Pascal你会帮我一个大忙的,因为我已经挖掘了三个星期。运气不好:(@Vincenzo这是一个棘手的情况,我们“不工作”很难支持。有很多方法可以剥猫皮,如果你碰巧一次尝试所有方法,那么什么都不起作用。你能尝试InitialContext覆盖方法(而不是通过jndi.properties文件)吗更新问题以显示您的设置和日志输出?@David InitialContext override方法很好,除了一件事。OpenEJB破坏了log4j以前的配置,用自己的配置覆盖它。我知道我应该告诉OpenEJB使用外部日志配置,但我如何从Maven做到这一点?嗯……我很感激您的评论,但没有一个有效:(在
    jdni.properties
    中记录配置被忽略。在
    pom.xml
    中提供日志配置对我来说是一种反模式。无论如何,我找到了一个解决方案(见我的答案),这很简单。@Vincenzo我能想象的唯一一件事是,阻止jndi.properties方法工作的是,文件不在预期位置的类路径中。如前所述,是jvm读取了该文件,并将一个覆盖了InitialContext属性的java.util.properties对象交给我们。那么,一切都可以工作了吗也可以通过jndi.properties使用InitialContext属性。我为您制作了一个简短视频,并用一个链接更新了答案,希望可以修复“不起作用”:如果您可以使用log4j.properties内容更新答案,那将是非常棒的。请注意,未来的读者注意,如果使用“openejb.logger.external”而不主动替换log4j配置,将导致根本没有日志记录。@David我更新了答案。现在我对openejb非常满意,因为我可以控制它的行为我真的不知道为什么OpenEJB官方文档中没有一个简单直接的例子来说明如何将它与Maven for unit一起使用
    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
    
    <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>