2012-03-16 7 views
11

Мы создаем новую систему, используя slf4j в качестве фасада для регистрации. При развертывании на вновь Weblogic 12с, мы нашли эту ошибку на логе консоли:Предотвратите использование Weblogic 12c с помощью связывания системы slf4j

SLF4J: Class path contains multiple SLF4J bindings. 
SLF4J: Found binding in [jar:file:/opt/Oracle/Middleware2/modules/org.slf4j.jdk14_1.6.1.0.jar!/org/slf4j/impl/StaticLoggerBinder.class] 
SLF4J: Found binding in [zip:/opt/Oracle/Middleware2/user_projects/domains/m3/servers/AdminServer/tmp/_WL_user/test/t030q4/war/WEB-INF/lib/slf4j-log4j12-1.6.4.jar!/org/slf4j/impl/StaticLoggerBinder.class] 

после прибегая к помощи, мы обнаружили, что это всего лишь предупреждение, SLF свяжут первую нашли регистратор, который в данном случае является основой системы журналирования WebLogic в , Есть ли способ привязать его к структуре ведения журнала в нашем WAR-файле? Имея < prefer-web-inf-classes > в weblogic.xml не помогает

ответ

0

Я не верю, что SLF4J предоставляет способ заставить свою собственную версию, поскольку она основана на самообнаружении в пути к классам.

Таким образом, если у вас есть права администратора на WebLogic, самым простым решением является обновление версии Web-версии SLF4J до версии 1.6.4 путем обновления файла в папке установки WebLogic.

В противном случае, вы можете попытаться построить EAR вместо WAR и следовать рекомендациям here, хотя я сомневаюсь, что это будет работать, если предпочитают-веб-ИНФ-классы не работает в WAR.

+0

eh, что я имею в виду, «сделать slf4j bind logger доступной библиотеке, предоставленной мной вместо привязки к системной библиотеке». Это не связано с версией slf4j, так как при переключении на 1.6.1 эта ошибка возникает, и в соответствии с документом slf4j, когда slf4j обнаружил несколько связанных логгеров, он будет привязан к первому регистратору, который всегда связан с slf44 системы. – dhchen

2

У нас также была эта проблема, и поскольку нам необходимо настроить ведение журнала с помощью Log4J, это было проблемой. Однако, используя prefer-application-packages, кажется, работает до сих пор, то есть положить weblogic-application.xml файл в META-INF папке EAR следующим:

<?xml version="1.0" encoding="UTF-8"?> 
<weblogic-application xmlns="http://www.bea.com/ns/weblogic/90" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.bea.com/ns/weblogic/90 http://www.bea.com/ns/weblogic/90/weblogic-application.xsd http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/application_1_4.xsd" > 
    <prefer-application-packages> 
     <package-name>org.slf4j</package-name> 
    </prefer-application-packages> 
</weblogic-application> 

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

У нас все еще есть вышеупомянутое предупреждение, но он использует Log4J по мере необходимости. В самом деле, если вы посмотрите на the URL specified on the next line в журналах (опущенные здесь в вопросе), он говорит:

Предупреждения излучаемого SLF4J только что, предупреждение. SLF4J по-прежнему связывается с первой структурой, которую он находит на пути класса.

Так что я предполагаю, что это все еще использует нормальный механизм класса загрузки для загрузки org.slf4j.impl.StaticLoggerBinder, что мы на самом деле настроен предпочитать один в нашем EAR (то есть сделать его первым на пути к классам).

Однако предупреждение остается, но оно работает. Исправление предупреждения было бы хорошим, но, вероятно, не возможным без изменения предоставленных библиотек WebLogic.

4

Для файла WAR вы должны использовать prefer-application-packages в weblogic.xml, как описано в this и this сообщений.

В вашем случае это будет нечто вроде

<?xml version="1.0" encoding="UTF-8"?> 
<wls:weblogic-web-app xmlns:wls="http://xmlns.oracle.com/weblogic/weblogic-web-app" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd http://xmlns.oracle.com/weblogic/weblogic-web-app http://xmlns.oracle.com/weblogic/weblogic-web-app/1.4/weblogic-web-app.xsd"> 
    <wls:container-descriptor> 
     <wls:prefer-application-packages> 
      <wls:package-name>org.slf4j</wls:package-name> 
     </wls:prefer-application-packages> 
    </wls:container-descriptor> 
</wls:weblogic-web-app> 
27

фильтрации не должно быть сделано на классы, но на ресурсы, потому что SLF4J ищет StaticLoggerBinder.class как ресурс, а не как класса.

Включите это в свое веб-приложение.XML, а также:

<wls:prefer-application-packages> 
    <wls:package-name>org.slf4j.*</wls:package-name> 
    <wls:package-name>org.apache.commons.*</wls:package-name> 
</wls:prefer-application-packages> 

<wls:prefer-application-resources> 
    <wls:resource-name>org/slf4j/impl/StaticLoggerBinder.class</wls:resource-name> 
</wls:prefer-application-resources> 

и ваш регистратор будет использоваться вместо одной внутри системы ClassLoader.

+3

Является ли org.apache. commons. * запись, необходимая для работы SLF4J? Если да, то почему? –

+0

несколько дней поздно, но: com.apache.commons.logging. * – HRgiger

 Смежные вопросы

  • Нет связанных вопросов^_^