2009-08-07 92 views
0

我有一個小應用程序通過webservice將圖片上傳到另一個網站。 我目前的問題是,Axis通過STDOUT記錄整個xml消息(包括圖片的二進制數據!),我似乎無法弄清楚,如何禁用它。在jboss中禁用Axis log4j日誌

我對於JBoss(JBoss的-的log4j.xml)log4j的設置包括用於正常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 

更新 我查了軸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 

設置這jar中的錯誤,或者作爲jboss-log4j.xml中的類別根本沒有幫助。

任何人都知道如何關閉Axis日誌記錄或至少將其設置爲ERROR級別?

乾杯
弗蘭克

+0

哪個版本的Axis是這個? – skaffman 2009-08-07 10:17:03

+0

使用axis-1.4.jar – FrankS 2009-08-07 10:20:13

回答

1

好的,在試圖找到更好的解決方案之後,唯一真正的方法是檢查舊的遺留代碼並將所有System.out調用變爲真正的日誌記錄語句(無論如何),然後簡單地過濾剩餘的STDOUT消息到另一個日誌文件中。

其中一個主要原因似乎是Jboss本身。來自axis2郵件列表的This discussion解釋了原因: 啊,但是你沒有提到你正在使用jboss!它幾乎迫使你 你使用他們的父母的log4配置。忽略這種 情況下Axis2的日誌,看看:

〜/ JBoss的/服務器/默認/ conf目錄/的log4j.xml

有你有限制的類別。例如,您有:

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

您可以保持原樣並僅從server.log中取出日誌。

我嘗試設置類別,但沒有成功。我認爲這是因爲軸和軸2的差異。所以唯一的解決辦法是去好的編碼方式,只是不要在自己的代碼中使用STDOUT ;-)

0

首先,你要檢查你的log4j的配置實際上是被讀取的一個 - 我記得,在過去,至少一個軸罐子(我認爲它可能有一直是axis-ant.jar)被綁定他們自己的log4j.properties。這可能是因爲log4j正在讀取與您不同的配置文件,因此您在調整配置時毫無意義!

您可以啓用系統屬性-Dlog4j.debug進行log4j打印以標準讀出正在讀取的配置文件。如有必要,您可以使用-Dlog4j.configuration=<file>指向您自己的文件。

此外,我不認爲這是造成你的問題,但你爲什麼設置添加到假?

+0

我檢查了axis jar,但它只包含一個名爲simplelog.properties的文件,我會將其添加到問題中。雖然這不起作用。 至於可加性,它是從c&p和cimplification中遺留下來的,我也刪除了它。 我也會看看系統屬性。 – FrankS 2009-08-07 13:52:29

+0

如果您試圖將日誌記錄級別限制爲僅限錯誤,則addability必須爲false,否則如果根級別更包容,該行基本上不起作用。 – Yishai 2009-08-07 14:06:04

0

問題是Axis沒有使用Log4j來記錄該消息,所以試圖更改該類的log4j日誌級別並不相關。 Axis使用System.out.println。

我能想到的唯一一件事(考慮到副作用,這真的不好)是完全關閉STDOUT註銷。可能將優先權設置爲關閉將會執行。

唯一真正的解決方案是修復Axis並修補代碼,而不是將xml輸出到System.out,而是使用日誌記錄機制 - 然後您可以控制它。

+0

您可以指出Axis中的哪個類正在執行此操作嗎?聽起來很奇怪 – 2009-08-07 16:32:54

+0

我不知道。如果STDOUT正在記錄XML,Axis正在這樣做,或者FrankS正在這樣做,並認爲Axis正在這樣做。默認情況下,JBoss會將任何System.out調用重定向到日誌中(儘管有辦法禁用它)。 – Yishai 2009-08-07 16:57:07

2

這可能是一天晚了,但問題似乎並不是記錄本身是在Axis中完成的(通過System.out和Commons Logging),而是LogHandler存在於處理程序鏈中。這就是如何記錄經過的時間。

您可以從Axis configuration file(s) - server-config.wsdd和/或client-config.wsdd中禁用此處理程序,具體取決於您是將Axis用作服務器還是客戶端。

您在控制檯中看到消息的原因可能是由於LogHandler.writeToConsole屬性設置爲true。如果將LogHandler.writeToConsole設置爲false,則應將其寫入由LogHandler.fileName屬性定義的文件中。默認情況下,文件名是axis.log。

+0

嗨,正如我在下面提到的,我已經改變了配置,所以我不再煩惱它了。我仍然檢查任何配置文件,但沒有成功。你知道LogHandler.writeToConsol = true是否是默認設置?這將解釋行爲。 – FrankS 2009-09-10 12:33:52

+0

從Axis來源,我推斷它不是默認值。 – 2009-09-10 14:17:29

0

知道正在讀取哪個log4j.properties文件或log4j.xml是非常重要的。正如馬特指出的那樣,這對了解你的調整工作不起作用至關重要。