2010-04-28 31 views
15

Ich experimentiere mit dem Schreiben einer Java SE Swing-Anwendung mit JBoss Weld. Weld konfiguriert die mit log4j Protokollierung der folgenden log4j.xml Datei in das Glas mit:Wie log4j in 3rd-Party-Jar deaktivieren?

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

    JBoss, Home of Professional Open Source 
    Copyright 2009, Red Hat, Inc. and/or its affiliates, and individual 
    contributors by the @authors tag. See the copyright.txt in the 
    distribution for a full listing of individual contributors. 

    Licensed under the Apache License, Version 2.0 (the "License"); 
    you may not use this file except in compliance with the License. 
    You may obtain a copy of the License at 
    http://www.apache.org/licenses/LICENSE-2.0 
    Unless required by applicable law or agreed to in writing, software 
    distributed under the License is distributed on an "AS IS" BASIS, 
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
    See the License for the specific language governing permissions and 
    limitations under the License. 

--> 

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false"> 

    <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender"> 
     <param name="Target" value="System.out"/> 
     <layout class="org.apache.log4j.PatternLayout"> 
      <!-- The default pattern: Date Priority [Category] Message\n --> 
      <param name="ConversionPattern" value="%d{ABSOLUTE} %-5p [%c{2}] %m%n"/> 
     </layout> 
     <filter class="org.apache.log4j.varia.StringMatchFilter"> 
     <param name="AcceptOnMatch" value="false" /> 
     <param name="StringToMatch" value="Failure while notifying an observer of event [a]" /> 
     </filter> 
    </appender> 

    <!-- ############### Weld logging ################### --> 

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

    <root> 
     <priority value="INFO"/> 
     <appender-ref ref="CONSOLE"/> 
    </root> 

</log4j:configuration> 

ich Protokollierung ganz in meiner Anwendung deaktivieren möchten. Ich habe versucht, es bietet eine log4j.properties Datei wie folgt zu deaktivieren:

log4j.debug=FALSE 
log4j.rootLogger=OFF, CONSOLE 

Egal was ich versuche ich nicht zu tun, um die log4j Nachrichten von Weld verhindern in der Konsole angezeigt. Ich möchte nur die Protokollierung vollständig deaktivieren. Aber wie?

Antwort

11

Kurz nachdem ich diese Frage gepostet habe, habe ich die Antwort gefunden. Erstellen Sie eine Datei log4j.xml, um die Standardeinstellungen in der JAR-Datei von Drittanbietern zu überschreiben. Hier

ist ein Beispiel spezifisch auf diesen Thread:

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

    <appender name="CA" class="org.apache.log4j.ConsoleAppender"> 
     <layout class="org.apache.log4j.PatternLayout"> 
      <param name="ConversionPattern" value="%m%n"/> 
     </layout> 
    </appender> 

    <!-- 
     If you want to enable logging for the application 
     but wish to disable logging for a specific package 
     then use this, where org.jboss is the package 
     for which you wish to disable logging. 
    --> 
    <category name="org.jboss"> 
     <priority value="off"/> 
    </category> 

    <root> 
     <priority value="off"/> <!--Notice this disables all logging--> 
     <appender-ref ref="CA"/> 
    </root> 

</log4j:configuration> 
+0

Das funktioniert für mich. Danke vielmals. Nur Erinnerung legen Sie die Datei unter dem Quellverzeichnis. – dli

1

Wenn eine log4j XML-Format-Konfigurationsdatei vorhanden ist, hat sie Vorrang vor Eigenschaftendateien. Das ist log4j definiertes Verhalten. Sie können Ihre Konfiguration in log4j.xml speichern und sie sollte wirksam werden.

+0

Vielen Dank für Ihren Kommentar. Ich habe die Lösung kurz nach dem Schreiben dieser Frage entdeckt. Als ein spezifisches Beispiel, um diese Frage zu beantworten, schließe ich eine Beispieldatei log4j.xml ein, die die Protokollierung in dem Jboss-Schweißkrug der dritten Partei deaktiviert. – axiopisty

+0

Ich habe versucht, log4j.xml in src/test/resources zu überschreiben, aber es sieht so aus, als ob ich ignoriert werde. Ich bekomme immer noch diese 'INFO: WELD-000900 1.1.4 (Final)'. Irgendwelche Ideen? – Nowaker

+0

haben Sie versucht, es in src/main/resources zu setzen? – axiopisty

0

Ich denke, die Standard-Protokollkonfiguration für dritte Teil Gläser gewonnene `t jede Nachricht in STDOUT oder Datei drucken.

Wenn Sie jedoch die Standardprotokollkonfiguration ohne Dokument außer Kraft setzen möchten, besteht die beste Lösung darin, die JAR-Dateien zu dekompilieren und herauszufinden, wie die Konfiguration geladen wird.