Как настроить логгер для jackrabbit-standalone-2.6.0.jar

Я пытаюсь настроить ведение журнала с помощью программы, использующей jackrabbit-standalone-2.6.0.jar. Этот архив содержит несколько slf4j-пакетов (org.slf4j, org.slf4j.helpers, org.slf4j.impl, org.slf4j.spi), но, насколько я вижу, нет фреймворка для логирования. Но когда я добавляю slf4j-log4j12-1.7.2.jar, я получаю сообщения:

SLF4J: найдена привязка в [jar:file:/D:/Anwendungen/EclipsePlugins/Jackrabbit/jackrabbit-standalone-2.6.0.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: найдена привязка в [jar:file :/D:/Anwendungen/EclipsePlugins/slf4j-1.7.2/slf4j-1.7.2/slf4j-log4j12-1.7.2.jar!/org/slf4j/impl/StaticLoggerBinder.class]

Есть ли возможность посмотреть, какой именно реализатор здесь используется?

Я хочу настроить регистратор. Прямо сейчас он записывает большое количество сообщений DEBUG в файл с именем «jackrabit.log_IS_UNDEFINED», и мне срочно нужно подавить это. В интернете есть несколько подсказок, предлагающих настроить регистратор, но я не совсем понимаю, что мне нужно делать. Классы "DOMConfigurator" и "PropertyConfigurator" внутри пакета недоступны, но при добавлении например "slf4j-log4j12-1.7.2.jar" получаю вышеописанные сообщения. Поэтому я не могу инициализировать регистратор в своей программе. Было сказано, что нужно добавить XML-файл конфигурации в путь к классам. Я попробовал это (в Eclipse я добавил папку, содержащую XML, в BuildPath, затем создал jar-файл из своего XML-файла и добавил этот jar-файл в BuildPath), но это не имело никакого значения.

Я прочитал описание «Процедура инициализации по умолчанию» в http://logging.apache.org/log4j/1.2/manual.html, но должен заявить, что вообще ничего не понял. Что это значит: 2. Присвойте строковой переменной ресурса значение системного свойства log4j.configuration. Предпочтительный способ указать файл инициализации по умолчанию — через системное свойство log4j.configuration. Если системное свойство log4j.configuration не определено, задайте для строковой переменной resource значение по умолчанию «log4j.properties». Где я должен указать переменную строки ресурсов?

мой файл log4j.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
         <appender name="Console" class="org.apache.log4j.ConsoleAppender">
             <layout class="org.apache.log4j.PatternLayout">
                <param name="ConversionPattern" value="%d  %-5p  [%c{1}] %m %n" />
            </layout>
        </appender>

        <root>
            <priority value="info" />
            <appender-ref ref="Console" />
        </root>
 </log4j:configuration>

Приветствуется любая идея настроить регистратор программно или с помощью инициализации по умолчанию.

Ульрих


person Ulrich    schedule 09.04.2013    source источник


Ответы (1)


Начиная с версии 1.6.6, в случае обнаружения нескольких привязок на пути к классу, SLF4J выводит имя класса фреймворка/реализации, с которым он связывается. Сразу после строк «SLF4J: Found binding» должна быть строка, начинающаяся с:

"SLF4J: Actual binding is of type []"

Вы пропустили эту строчку?

Содержимое jackrabbit-standalone-2.6.0.jar указывает на то, что он поставляется с logback в качестве среды ведения журнала. Файл jackrabbit-standalone-2.6.0.jar также поставляется с файлом конфигурации logback.xml.

Вот этот файл logback.xml:

<configuration>
  <appender name="jackrabbit" class="ch.qos.logback.core.FileAppender">
    <file>${jackrabbit.log}</file>
    <encoder>
      <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %-40([%thread] %F:%L) %msg%n</pattern>
    </encoder>
  </appender>

  <appender name="jetty" class="ch.qos.logback.core.FileAppender">
    <file>${jetty.log}</file>
    <encoder>
      <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %-40([%thread] %F:%L) %msg%n</pattern>
    </encoder>
  </appender>

  <logger name="org.mortbay.log" level="${log.level}"
          additivity="false">
    <appender-ref ref="jetty"/>
  </logger>

  <root level="${log.level}">
    <appender-ref ref="jackrabbit"/>
  </root>
</configuration>

Как и в оболочках Unix, в logback.xml любая строка в пределах ${} обозначает переменную.

Глядя на файл logback.xml выше, мы видим, что переменные ${jackrabbit.log}, ${jetty.log} и "${log.level}" являются ссылками. Эти переменные устанавливаются методом prepareServerLog() в Основной класс jackrabbit-standalone 2. PrepareServerLog() вызывается, если в командной строке не указан параметр "-i" или "--cli". Вы вызываете jackrabbit с параметром -i или --cli?

В любом случае, было бы полезно опубликовать здесь все сообщения, напечатанные SLF4J, а также команду, которую вы используете для запуска jackrabbit-standalone.

person Ceki    schedule 09.04.2013
comment
Не было такого сообщения. Сейчас еще раз перепроверил. Я не сразу использую jackrabbit как автономную систему; моя пакетная программа использует jcr 2.0-API для доступа к запущенному экземпляру jackrabbit через WebDAV. Самый простой способ предоставить все необходимые классы — добавить автономную банку в путь к классам пакетной программы. Спасибо за обновление. Это очень помогает. Я прочитаю logback-docu, чтобы понять, как убедиться, что файл больше не пишется - без перепаковки архива. Может и здесь вы мне дадите совет. - person Ulrich; 09.04.2013
comment
Если основной класс jackrabbit-standalone не вызывается, вы можете сами определить ${jackrabbit.log} и ${log.level}. Просто определите jackrabbit.log и log.level как системные свойства Java. - person Ceki; 09.04.2013
comment
Я создал файл logback.xml и установил системное свойство logback.configurationFile для ссылки на него. в xml я установил фильтр для удаления сообщений DEBUG. Это остановило поток сообщений. Пока я не вижу другой возможности решить эту проблему. - person Ulrich; 09.04.2013
comment
Настройка logback.configurationFile будет работать, но также будет работать установка jackrabbit.log и log.level. - person Ceki; 10.04.2013