Имейте в виду, что возможность переопределения, которую вы получаете с помощью регистратора OpenEJB, работает как со свойствами системы, так и со свойствами InitialContext.
Свойство openejb.logger.external
действительно предназначено для серверов, интегрирующих OpenEJB, таких как Geronimo, которыйиспользуют различные системы регистрации и нуждаются в расширенном контроле над регистрацией.Он не предназначен для общего использования, так как при включенном этом параметре и без каких-либо других шагов вы получаете никаких записей любого вида, даже ERROR, и никакой информации о неудачных развертываниях.Даже правильное использование все равно отключит все опции, обсуждаемые ниже.
Если вы хотите получить или зарегистрировать конфигурацию ведения журнала, есть много способов сделать это без потери каких-либо функций ведения журнала, предоставляемых 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 в classpath
- системных свойств (в данном случае настройка через верный огонь)
- embedded.logging.properties в classpath
Вариант 5: Запрос функции
Как всегда, мы очень рады сделать все проще, чем можем.Если у вас есть конкретная потребность или идея, мы с удовольствием попробуем ее реализовать или поможем вам сделать это, если вы захотите внести свой вклад.