Вход в Eclipse / OSGi плагины - PullRequest
       14

Вход в Eclipse / OSGi плагины

21 голосов
/ 22 октября 2008

Я начинаю разрабатывать плагин Eclipse (технически плагин OSGi), и одна из первых проблем, с которыми я столкнулся, заключается в том, что я не могу управлять выводом общего достояния, как обычно.

Я включил пакет commons-logging в зависимости плагина, и, действительно, когда я что-то регистрирую (с INFO или более высоким уровнем серьезности), он регистрируется на консоли. Тем не менее, я не могу войти на каком-либо более низком уровне (например, DEBUG или TRACE).

Я указал файл log4j.properties, и он находится в пути к классам (для среды выполнения, так же как и пакет commons-logging), но ни один из параметров в этом файле свойств не влияет на поведение регистратора. .

Вот файл log4j.properties:

#  Log4j Logging levels, in order of decreasing importance are:
#   FATAL, ERROR, WARN, INFO, DEBUG, TRACE
#

# Root logger option
log4j.rootLogger=ERROR,stdout
#,LOGFILE

# Direct log messages to stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %r (%l) %t%n - %m%n

Что мне нужно сделать, чтобы я мог реально контролировать выход регистратора?

Вот несколько примеров выходных сообщений в надежде, что форматирование может совпадать со значением по умолчанию для java.util.logging или предоставить кому-то другие подсказки:

Oct 21, 2008 11:01:23 PM com.stottlerhenke.sentinel.client.Activator start
SEVERE: fatal_message
Oct 21, 2008 11:01:23 PM com.stottlerhenke.sentinel.client.Activator start
WARNING: warn_message
Oct 21, 2008 11:01:23 PM com.stottlerhenke.sentinel.client.Activator start
INFO: info_message

Обновление:

Я уже пробовал различные комбинации:

и я могу только получать сообщения уровня DEBUG или более низкого уровня, если я запускаю OSGi вручную из приглашения (что непрактично для того, что я разрабатываю). Кроме того, я не могу влиять на любой другой тип конфигурации регистрации через различные файлы свойств. Все, что я пытаюсь сделать в этом отношении, похоже, отменяется настройкой затмения.

Я также пытался разместить различные конфигурационные файлы для вышеуказанных библиотек во многих местах, в том числе в виде фрагментов подключаемых модулей, прикрепленных к их соответствующим библиотекам, как предложено здесь , и все же, тот же результат происходит. 1047 *

Я реализовал пользовательский LogListener и проследил весь путь сообщения журнала (а также знаю, как это сделать) с помощью System.out.println, и отладочные сообщения присутствуют прямо пока они не будут выведены каким-либо используемым API-интерфейсом ведения журнала, они исчезнут.

Ответы [ 2 ]

23 голосов
/ 25 октября 2008

3 дня спустя ...

Я нашел проблему! Мне нужно было сделать две вещи, во-первых, была проблема с одним файлом MANIFEST.MF:

У меня было следующее в MANIFEST.MF для одного пакета:

Bundle-ClassPath: lib/jena.jar,
 .,
 org.apache.log4j-1.2.12.jar,
 lib/google-collect-snapshot.jar
Import-Package: com.acme.client.translation,
 com.acme.translation.interfaces,
 com.acme.shared.osgi,
 com.acme.utilities

То, что должно быть таким:

Bundle-ClassPath: lib/jena.jar,
 .,
 lib/google-collect-snapshot.jar
Import-Package: com.acme.client.translation,
 com.acme.client.translation.interfaces,
 com.acme.shared.osgi,
 com.acme.utilities,
 org.apache.log4j

Ключевым отличием является то, что log4j использовался как пакет, тогда как его следовало использовать как пакет. (У меня был jar log4j в моей директории lib с тех пор, как я ожидал, что Log4j «просто будет работать» с OSGi.) Jar работает , вроде как. Очевидно, он нашел некоторую конфигурацию log4j уровня затмения и использовал ее. Так как это был просто jar (не пакет), он не использовал фрагменты, которые могли бы указать пользовательскую конфигурацию ведения журнала, что приводит нас к другой вещи, которая должна была произойти:

Мне нужно было настроить фрагмент комплекта, чтобы указать конфигурацию ведения журнала. Эта ссылка из VonC дала мне информацию, чтобы сделать это. Это повлекло за собой ряд действий, к сожалению, в пакете с неправильным файлом MANIFEST.MF по-прежнему был указан jar log4j, указанный в Bundle-ClassPath, и это, похоже, переопределяет список Import-Package.

Я наконец понял, что происходит, когда мне нужно было войти в другой пакет (я только что сдался и вернулся к использованию журналов на уровне предупреждений и выше.) Этот новый пакет не мог найти конфигурация логирования! (поэтому у меня было три пакета, работающих в одной и той же среде OSGi, каждый с разным поведением log4j - один с использованием моих настроек фрагмента, другой с некоторыми случайными настройками ведения журнала Eclipse и, наконец, новый пакет, который не имел никакой конфигурации регистрации.) Детальные сравнения этих трех комплектов показали разницу в файлах Manifest.MF, и теперь все они используют комплект фрагментов.

Я должен огромный благодаря авторам большей части Eclipse Zone , VonC , Ekkes и всем в #eclipse на freenode за помощь и терпение :) 1033 *

18 голосов
/ 22 октября 2008

Это не фактический ответ на ваш вопрос, но вы можете найти некоторые подсказки в этом наборе статей от ekke .

Полагаю, вы уже читали " Использование Log4J в Eclipse Equinox / OSGi ":

Вы запускали сеанс osgi в режиме консоли?

java -jar org.eclipse.osgi_3.3.0.v20070530.jar -console -noExit -clean

Таким образом, вы можете протестировать log4j в чистой среде osgi и проверить, работает ли он там.

Дайте знать, если вы найдете решение (опубликуйте его как ответ), и я его проголосую;)

...