Как настроить ведение журнала OpenEJB? - PullRequest
8 голосов
/ 14 ноября 2010

Как настроить формат ведения журнала 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 не имеют никакого эффекта.

Ответы [ 4 ]

8 голосов
/ 25 ноября 2010

Имейте в виду, что возможность переопределения, которую вы получаете с помощью регистратора 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: любая комбинация

Также обратите внимание, что все вышеперечисленные методы могут использоваться одновременно, включая любые переопределения, которые вы хотите использовать в отдельных тестовых случаях.Порядок приоритетов выглядит следующим образом:

  1. свойства InitialContext
  2. jndi.properties в classpath
  3. системных свойств (в данном случае настройка через верный огонь)
  4. embedded.logging.properties в classpath

Вариант 5: Запрос функции

Как всегда, мы очень рады сделать все проще, чем можем.Если у вас есть конкретная потребность или идея, мы с удовольствием попробуем ее реализовать или поможем вам сделать это, если вы захотите внести свой вклад.

3 голосов
/ 25 ноября 2010

Это то, что я сделал, чтобы все работало правильно (в 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 во время тестирования, благодаря поддержке Дэвида:)

2 голосов
/ 14 ноября 2010

Согласно Настройка ведения журнала в тестах , вы можете переопределить конфигурацию ведения журнала по умолчанию:

  • , указав определенные свойства на InitialContext время создания ~ или ~
  • путем предоставления embedded.logging.properties на пути к классам

Это рекомендуемый подход.

В качестве альтернативы вы можете отключить всю конфигурацию по умолчанию и предоставить свою собственную:

вы можете установить для "openejb.logger.external" значение "true" в качестве системного свойства (не будет работать как свойство InitialContext).Тогда OpenEJB вообще не будет пытаться настроить ведение журнала, и вы можете настроить ведение журнала с помощью Log4j напрямую, используя любой из его API;xml, свойства или код.

0 голосов
/ 15 февраля 2013

Если вы не возражаете против использования другой среды ведения журналов, эти ссылки могут быть полезны.

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

Мост с июля по 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

...