Деактивирайте регистрирането на Axis log4j в jboss

Имам малко приложение, което качва снимки на друг уебсайт чрез уеб услуга. Сегашният ми проблем е, че Axis регистрира цялото xml съобщение (включително двоичните данни на картината!) чрез STDOUT и не мога да разбера как да го деактивирам.

Моите настройки за log4j за jboss (jboss-log4j.xml) включват допълнение за нормални STDOUT информационни записи и се опитах да деактивирам ос с различни настройки на категория:

<appender name="STDLOG" class="org.jboss.logging.appender.RollingFileAppender">
  <errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/>
  <param name="File" value="${jboss.server.log.dir}/myapplication.log"/>
  <param name="Append" value="true"/>
    <param name="MaxFileSize" value="5MB"/>
    <param name="MaxBackupIndex" value="10"/>

    <layout class="org.apache.log4j.PatternLayout">
    <param name="ConversionPattern" value="%d %-5p [%c] (%t) %m%n"/>
  </layout>
</appender>

използвайки тази настройка за STDOUT:

<category name="STDOUT">
  <priority value="DEBUG"/>
  <appender-ref ref="STDLOG"/>
</category>

Опитах тези настройки на категорията без промяна в резултата:

<category name="log4j.logger.org.apache.axis" additivity="false">
  <priority value="ERROR"/>
</category>

<category name="org.apache.axis">
  <priority value="ERROR"/>
</category>

Някои примерни изходни данни изглеждат така:

2009-08-07 10:29:43,911 INFO  [STDOUT] (http-127.0.0.1-8080-1) =======================================================
= Elapsed: 2190 milliseconds
= In message: <?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
 xmlns:xsd="http://www.w3.org/2001/XMLSchema"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
 <soapenv:Body>
  <addVehicleImage xmlns="urn:VMgrWebService">
   <id xmlns="">APP-T4QKR3U</id>
   <idType xmlns="">chiffre</idType>
   <data xmlns="">9j4AAQSkZJRgABAQAAAQABAAD2wBDAAUDBAQEAwUEBAQFB
     QUGBww0TDMnrXAfKlLjnNJZcciiAOtqk9NG99qhZJKuyYq5k3G
     8P2bVSOpT7rVddRP2Z/yqidRuMMKaO2CXRQNWP2jfOo4S4Bo3W
   removed rest of image data...
     IBwcHBw8LCwkMEQ8SEhEPERETFhwXExQaFRERGCEYGe1UqaZJJy0jSHPGQ
2009-08-07 10:29:43,927 INFO  [STDOUT] (http-127.0.0.1-8080-1) Upload result: true for image mypicture.JPG  

Актуализация Проверих axis-1.4.jar и има файл, наречен simplelog.properties:

# Logging detail level,
# Must be one of ("trace", "debug", "info", "warn", "error", or "fatal").
org.apache.commons.logging.simplelog.defaultlog=info

Задаването на това на грешка в буркана или като категория в jboss-log4j.xml изобщо не помогна.

Някой да има идея как мога да изключа регистрирането на Axis или поне да го настроя на ниво ГРЕШКА?

Наздраве
Франк


person FrankS    schedule 07.08.2009    source източник
comment
Коя версия на Axis е това?   -  person skaffman    schedule 07.08.2009


Отговори (5)


Това може да е малко късно през деня, но проблемът изглежда не е, че самото регистриране се извършва в Axis (чрез System.out и Commons Logging), а по-скоро, че LogHandler присъства във веригата на манипулатора. Така се регистрира изминалото време.

Можете да деактивирате този манипулатор от конфигурационния файл на Axis(ите) - server-config.wsdd и/или client-config.wsdd, в зависимост от това дали използвате Axis като сървър или клиент.

Причината, поради която виждате съобщения във вашата конзола, вероятно се дължи на свойството LogHandler.writeToConsole, което е зададено на true. Ако зададете LogHandler.writeToConsole на false, той трябва да записва във файл, както е дефинирано от свойството LogHandler.fileName. По подразбиране името на файла е axis.log.

person Vineet Reynolds    schedule 10.09.2009
comment
здравейте, както споменах по-долу, вече промених конфигурацията, така че вече не се занимавам много с това. Все пак проверих за някакъв конфигурационен файл, но без успех. Знаете ли дали LogHandler.writeToConsol=true е настройката по подразбиране? Това би обяснило поведението. - person FrankS; 10.09.2009
comment
От източника на Axis заключих, че не е по подразбиране. - person Vineet Reynolds; 10.09.2009

Добре, след като се опитахме да намерим по-добро решение, единственият реален начин беше да проверим стария наследен код и да превърнем всички извиквания на System.out в реални отчети за регистриране (все пак много по-добре) и след това просто да филтрираме останалите STDOUT съобщения в различен журнал файл.

Една от основните причини изглежда е самият Jboss. Тази дискусия от пощенския списък на axis2 обяснява защо: Ааа, но не споменахте, че използвате jboss! До голяма степен ви принуждава да използвате тяхната родителска конфигурация log4. Игнорирайте регистрирането на axis2 в този случай и вижте:

~/jboss/сървър/по подразбиране/conf/log4j.xml

Там трябва да ограничите категориите. Например имате:

<category name="org.apache">
  <priority value="INFO"/>
</category>

Можете да оставите това както е и просто да извадите вашите регистрационни файлове от server.log.

Опитах да задам категорията, но без успех. Предполагам, че това се дължи на разликите между axis и axis2. Така че единственото останало решение беше да отидете по добрия начин на кодиране и просто да не използвате STDOUT в собствения си код ;-)

person FrankS    schedule 19.08.2009

Първо, ще искате да проверите дали вашата log4j конфигурация всъщност е тази, която се чете - спомням си, че в миналото поне един axis jar (мисля, че може да е axis-ant.jar) беше виновен за групирането на собствените си log4j.properties . Възможно е log4j да чете конфигурационен файл, различен от вашия, което прави усилията ви да промените конфигурацията безсмислени!

Можете да активирате системните свойства -Dlog4j.debug, за да накарате log4j да отпечата стандартно кой конфигурационен файл се чете. Ако е необходимо, можете да използвате -Dlog4j.configuration=<file>, за да посочите вашия собствен файл.

Също така, не мисля, че това причинява вашите проблеми, но защо задавате additivity на false?

person matt b    schedule 07.08.2009
comment
Проверих axis jar, но той включваше само файл, наречен simplelog.properties, ще добавя това към въпроса. Промяната на това обаче не помогна. Що се отнася до адитивността, тя беше останала от c&p и cimpification, премахнах и нея. Ще разгледам и системното свойство. - person FrankS; 07.08.2009
comment
additivity трябва да е невярно, ако се опитвате да ограничите нивото на регистриране само до грешка, в противен случай редът по същество няма да има ефект, ако основното ниво е по-включващо. - person Yishai; 07.08.2009

Проблемът е, че Axis не използва Log4j за регистриране на това съобщение, така че опитът да се промени нивото на регистриране на log4j за този клас не е уместен. Axis използва System.out.println.

Единственото нещо, за което мога да се сетя (което наистина не е хубаво предвид страничните ефекти) е да изключа напълно STDOUT влизането. Вероятно настройката на приоритета на изключен ще свърши работа.

Единственото реално решение е да коригирате Axis и да закърпите кода, за да не изпомпвате xml към System.out, а вместо това да използвате механизма за регистриране - тогава можете да го контролирате.

person Yishai    schedule 07.08.2009
comment
Можете ли да посочите кой клас в Axis прави това? Звучи много странно - person matt b; 07.08.2009
comment
Не знам. Ако STDOUT регистрира XML, или Axis го прави, или FrankS го прави и си мисли, че Axis го прави. JBoss пренасочва всички извиквания на System.out към регистрационните файлове по подразбиране (въпреки че има начини да деактивирате това). - person Yishai; 07.08.2009

Много е важно да знаете кой файл log4j.properties или log4j.xml се чете. и както отбеляза Мат, това е от решаващо значение, за да разберете защо вашите усилия за настройка не работят.

person Vijay Kumar    schedule 18.10.2010