Disabilita la registrazione di HttpClient


133

Sto utilizzando commons-httpclient 3.1 in una suite di test di integrazione. La registrazione predefinita per HttpClient è estremamente rumorosa e non riesco a spegnerla. Ho provato a seguire le istruzioni qui, ma nessuna di esse fa alcuna differenza.

Principalmente ho solo bisogno di chiudere il logger org.apache.http.wire. Parte del problema è che non so quale tipo di logger HttpClient sta cercando di utilizzare e la maggior parte del problema è che non ho mai usato questa libreria prima. Ho provato a creare un file log4j.properties e rilasciarlo nella mia cartella test / risorse, modificando il file master logging.properties in jre / lib e inviando le varie opzioni di registrazione a Maven come specificato nella pagina di registrazione , e nessuna di esse fare la differenza

Qualsiasi aiuto è apprezzato ... questo mi sta facendo impazzire.

AGGIORNAMENTO: una correzione: sembra che l'output in questione sia effettivamente originato dall'uso di HttpClient da parte di jwebunit, non dal mio. Ad ogni modo, non è desiderabile.

AGGIORNAMENTO: Grazie per i tentativi finora. Ho provato tutto ciò che viene suggerito di seguito, ma ancora senza fortuna. Ho un file commons-logging.properties nella mia cartella src / test / resources con i seguenti contenuti

org.apache.commons.logging.LogFactory=org.apache.commons.logging.impl.Log4jFactory
log4j.configuration=log4j.properties

e un file log4j.properties nella stessa cartella con i seguenti contenuti

log4j.rootLogger=ERROR, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%c] %m%n

#This is the line that should make httpclient shut up
log4j.logger.org.apache.http=ERROR

Tuttavia, quando eseguo i miei test ho ancora un sacco di output in questo modo:

21:57:41.413 [main] DEBUG org.apache.http.wire - << "                                   [\r][\n]"
21:57:41.413 [main] DEBUG org.apache.http.wire - << "[\r][\n]"
21:57:41.413 [main] DEBUG org.apache.http.wire - << "                                   [\r][\n]"
21:57:41.413 [main] DEBUG org.apache.http.wire - << "                               </ul>[\n]"
21:57:41.413 [main] DEBUG org.apache.http.wire - << "    [\n]"
21:57:41.424 [main] DEBUG org.apache.http.wire - << "[\n]"
21:57:41.425 [main] DEBUG org.apache.http.wire - << "[\r][\n]"
21:57:41.425 [main] DEBUG org.apache.http.wire - << "[\r][\n]"
21:57:41.425 [main] DEBUG org.apache.http.wire - << "                   </div>[\r][\n]"
21:57:41.425 [main] DEBUG org.apache.http.wire - << "                </li>[\r][\n]"
21:57:41.425 [main] DEBUG org.apache.http.wire - << "            [\r][\n]"
21:57:41.425 [main] DEBUG org.apache.http.wire - << "            [\r][\n]"
21:57:41.433 [main] DEBUG org.apache.http.wire - << "        </ul>[\n]"
21:57:41.433 [main] DEBUG org.apache.http.wire - << "</div>[\n]"
21:57:41.433 [main] DEBUG org.apache.http.wire - << "[\n]"
21:57:41.433 [main] DEBUG org.apache.http.wire - << "</div>[\n]"
21:57:41.433 [main] DEBUG org.apache.http.wire - << "[\n]"
21:57:41.433 [main] DEBUG org.apache.http.wire - << "[\n]"
21:57:41.433 [main] DEBUG org.apache.http.wire - << "[\n]"
21:57:41.433 [main] DEBUG org.apache.http.wire - << "[\n]"
21:57:41.433 [main] DEBUG org.apache.http.wire - << "<div class="details">[\n]"
21:57:41.442 [main] DEBUG org.apache.http.wire - << "[\n]"
21:57:41.443 [main] DEBUG org.apache.http.wire - << "[\n]"
21:57:41.443 [main] DEBUG org.apache.http.wire - << "<div class="details-body details-precis  ">[\n]
"
21:57:41.443 [main] DEBUG org.apache.http.wire - << "<div class="details-state">[\n]"
21:57:41.443 [main] DEBUG org.apache.http.wire - << "[\n]"
21:57:41.443 [main] DEBUG org.apache.http.wire - << "</div>[\n]"
21:57:41.443 [main] DEBUG org.apache.http.wire - << "</div>[\n]"
21:57:41.443 [main] DEBUG org.apache.http.wire - << "[\n]"
21:57:41.455 [main] DEBUG org.apache.http.wire - << "[\n]"
21:57:41.455 [main] DEBUG org.apache.http.wire - << "</div>[\n]"
21:57:41.455 [main] DEBUG org.apache.http.wire - << "[\n]"
21:57:41.455 [main] DEBUG org.apache.http.wire - << "</div>[\n]"
21:57:41.455 [main] DEBUG org.apache.http.wire - << "</div>[\n]"
21:57:41.455 [main] DEBUG org.apache.http.wire - << "[\n]"
21:57:41.455 [main] DEBUG org.apache.http.wire - << "[\n]"
21:57:41.455 [main] DEBUG org.apache.http.wire - << "[\n]"
21:57:41.455 [main] DEBUG org.apache.http.wire - << "[\r][\n]"
Destroying 1 processes21:57:41.465 [main] DEBUG org.apache.http.wire - << "[\r][\n]"

Questo output per tutto ciò che passa sul filo sta rendendo questa libreria inutilizzabile per me ... cioè fino a quando non riesco a capire come spegnerlo. C'è qualcosa di speciale che devo fare per leggere questa configurazione del registro?


Per tutti coloro che incontrano questo problema: assicurati di aggiungere -Dlog4j.debugalle opzioni della tua VM per assicurarti che sia caricato il file di configurazione giusto
Tommy

3
Vedi stackoverflow.com/questions/1436761/… . Per estrarre: public class Main { static { System.setProperty("org.apache.commons.logging.Log", "org.apache.commons.logging.impl.NoOpLog"); } // Rest of class as before }
PVS


3
Questo è mai stato risolto per OP. Questo esatto problema mi sta uccidendo.
Collin Bell,

2
Questo è risolto? Ho provato ad assegnare le risposte, senza fortuna.
Markvds,

Risposte:


85

Aggiornamento log4j.propertiesper includere:

log4j.logger.httpclient.wire.header=WARN
log4j.logger.httpclient.wire.content=WARN

Se la libreria Log4j non è installata, HttpClient (e quindi JWebUnit) utilizzerà il logback. In questa situazione, crea o modifica logback.xmlper includere:

<configuration>
    <logger name="org.apache" level="WARN" />
    <logger name="httpclient" level="WARN" /> 
</configuration>

L'impostazione del livello di registro su WARNcon Log4j utilizzando il nome del pacchetto org.apache.commons.httpclientin log4j.properties non funzionerà come previsto:

log4j.logger.org.apache.commons.httpclient=WARN

Questo perché l'origine di HttpClient (v3.1) utilizza i seguenti nomi di registro:

public static Wire HEADER_WIRE = new Wire(LogFactory.getLog("httpclient.wire.header"));
public static Wire CONTENT_WIRE = new Wire(LogFactory.getLog("httpclient.wire.content"));

19
Nella fonte 4.2.1, i nomi dei registri sono: "org.apache.http.headers" e "org.apache.http.wire", sebbene anche usandoli, la rumorosa registrazione di Apache non sembra chiudersi per me .
Tinclon,

Grazie!!! Inoltre: se hai questo problema da qualche parte nel tuo codice, dove usi httpclient e non usi già Log4j: ricorda anche di includere il vaso log4j nel percorso di classe ...
FelixD

30

Nota: alcune di queste risposte potrebbero ripetere cose che già conosci (o pensi di sapere), ma ci sono un po 'di informazioni errate che fluttuano su questa domanda, quindi inizierò all'inizio e spiegherò tutto

  • Commons HttpClient utilizza Commons-Logging per tutte le sue esigenze di registrazione.
  • Commons-Logging non è un framework di registrazione completo, ma piuttosto è un involucro attorno a diversi framework di registrazione esistenti
  • Ciò significa che quando si desidera controllare l'output della registrazione, si finisce (principalmente) per configurare una libreria diversa da Commons-Logging, ma poiché Commons-Logging avvolge diverse altre librerie, è difficile per noi indovinare quale configurare senza sapere la tua configurazione esatta.
  • Commons-Logging può accedere a log4j, ma può anche accedere a java.util.logging(registrazione JDK1.4)
  • Commons-Logging cerca di essere intelligente e indovina quale framework di registrazione stai già utilizzando, e invia i suoi log a quello.
  • Se non si dispone già di un framework di registrazione e si esegue su un JRE che è 1.4 o versione successiva (come si dovrebbe essere), probabilmente invierà i suoi messaggi di registro alla registrazione JDK ( java.util.logging)
  • Affidarsi al meccanismo di individuazione automatica di Commons-Logging è soggetto a errori. Semplicemente aggiungendolog4j.jar al percorso di classe indurrebbe a cambiare il meccanismo di registrazione utilizzato, che probabilmente non è quello desiderato
  • È preferibile indicare esplicitamente a Commons-Logging quale libreria di log da utilizzare
  • Puoi farlo creando un commons-logging.propertiesfile secondo queste istruzioni
  • I passaggi che si desidera seguire per configurare la registrazione commons-httpclient sono
    1. Decidi quale framework di registrazione sottostante vuoi usare. Esistono diverse opzioni, ma probabilmente log4jo java.util.loggingsono le opzioni migliori per te.
    2. Impostare il file delle proprietà di registrazione dei commons in modo che punti Logall'implementazione corretta . ad es. per utilizzare log4j, inserirlo nel file delle proprietà: org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JLoggero per utilizzare il set di registrazione JDK org.apache.commons.logging.Log=org.apache.commons.logging.impl.Jdk14Logger. Questi possono anche essere impostati come proprietà di sistema (ad es. Utilizzando-D dalla riga di comando).
    3. Configurare l'implementazione di registrazione sottostante (ad esempio log4j) per ignorare i messaggi che non si desidera e generare i messaggi desiderati.

Sono molti i passaggi, ma è quello che serve. Gli sviluppatori di Apache-commons tendono a presumere che tu abbia già configurato un framework di registrazione e possono capire quale è mediante il rilevamento automatico.
Se questo non è vero per te, allora tende ad essere un po 'più di lavoro per far funzionare le cose.


1
Questa è un'informazione molto utile; Sento davvero che dovrebbe essere aggiunto a questa pagina . L'hai scritto solo per questo?
natem345,

1
Amico, questa risposta è fantastica, ma non sono riuscito a farlo funzionare. Sto usando Dropwizard, e ho provato tutto ciò di cui hai parlato, inutilmente: '(
Vic Seedoubleyew,

19

Ho inserito questo nel mio file di configurazione log4j

log4j.logger.org.apache.http.wire=WARN

Ciò limita l'uscita al livello di avviso o superiore


19

Questo ha funzionato per i miei test;

java.util.logging.Logger.getLogger("org.apache.http.wire").setLevel(java.util.logging.Level.FINEST);
java.util.logging.Logger.getLogger("org.apache.http.headers").setLevel(java.util.logging.Level.FINEST);
System.setProperty("org.apache.commons.logging.Log", "org.apache.commons.logging.impl.SimpleLog");
System.setProperty("org.apache.commons.logging.simplelog.showdatetime", "true");
System.setProperty("org.apache.commons.logging.simplelog.log.httpclient.wire", "ERROR");
System.setProperty("org.apache.commons.logging.simplelog.log.org.apache.http", "ERROR");
System.setProperty("org.apache.commons.logging.simplelog.log.org.apache.http.headers", "ERROR");

18

Per log4j, aggiungere quanto segue a log4j.properties(nella sourcedirectory dell'applicazione ):

log4j.logger.org.apache=WARN
log4j.logger.httpclient=WARN

Per il logback, il seguente comando eliminerà logback.xmlil rumore:

<configuration>
    <logger name="org.apache" level="WARN" />
    <logger name="httpclient" level="WARN" /> 
</configuration>

1
Sto usando log4j. Aggiungendo completamente le prime due righe nel risolutore di log il mio problema. Tutti gli altri miei messaggi di registro vengono visualizzati in base al livello impostato. Considerando che i registri di Apache non lo fanno. Grande aiuto. Grazie.
Arun Thundyill Saseendran,

Probabilmente varierà a seconda della situazione, ma per disabilitare la registrazione terribilmente dettagliata abilitata immediatamente con l'SDK AWS, questa è l'unica che ha funzionato.
Matt Baker

11

Ci è voluto troppo tempo per scoprirlo, ma JWebUnit viene fornito in bundle con il componente di registrazione Logback , quindi non utilizzerà nemmeno log4j.propertiesocommons-logging.properties .

Invece, crea un file chiamato logback.xmle inseriscilo nella cartella del codice sorgente (nel mio caso src):

<configuration debug="false">
  <!-- definition of appender STDOUT -->
  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
      <pattern>%-4relative [%thread] %-5level %logger{35} - %msg %n</pattern>
    </encoder>
  </appender>

  <root level="ERROR">
    <!-- appender referenced after it is defined -->
    <appender-ref ref="STDOUT"/>
  </root> 
</configuration>

Il logback sembra essere ancora in fase di sviluppo e l'API sembra ancora cambiare, quindi questo esempio di codice potrebbe non riuscire in futuro. Vedi anche questa domanda StackOverflow .


1
Tu bellezza. Ho quasi ucciso un gatto per questa cosa. Mi stava facendo impazzire.
Manish Patel,

Questa è stata la soluzione per me. Penso che sia perché altre librerie includevo il logback incluso transitivamente, quindi è stato bloccato su questo logger.
Nathan,

10

Ho riscontrato questo problema durante l'utilizzo di RestAssured con JUnit. Per me questo approccio programmatico ha funzionato:

@BeforeClass
public static void setUpClass() {
    ch.qos.logback.classic.Logger root = (ch.qos.logback.classic.Logger) org.slf4j.LoggerFactory.getLogger("org.apache.http");
    root.setLevel(ch.qos.logback.classic.Level.INFO);

    //...
}

2
Fantastico, l'unica soluzione ha funzionato per me. Grazie mille.
lasote,

Grazie! Stava usando lo stesso identico codice all'inizio del metodo di test, non ha fatto nulla. Metterlo nella sua propria @Beforeo @BeforeClassfunzione ha funzionato magnificamente.
ExactaBox

8

Usiamo XML, piuttosto che un file di proprietà, per configurare il nostro output di registrazione. Il seguente codice ha funzionato per mettere a tacere questo chiacchiericcio.

<logger name="org.apache.commons.httpclient">
    <level value="fatal"/>
</logger>

<logger name="httpclient.wire.header">
    <level value="fatal"/>
</logger>

<logger name="httpclient.wire.content">
    <level value="fatal"/>
</logger>

4

Nel tuo log4.properties - hai questo set come faccio di seguito e nessun altro org.apache.httplogger impostato nel file?

-org.apache.commons.logging.simplelog.log.org.apache.http=ERROR

Inoltre, se non è stato specificato alcun livello di registro org.apache.httpnel file delle proprietà log4j, questo erediterà il log4j.rootLoggerlivello. Quindi, se hai log4j.rootLoggerimpostato diciamo ERRORE ed org.apache.httpelimina le impostazioni nelle tue proprietà log4j.proper che dovrebbero renderlo solo logERROR messaggi di per ereditarietà.

AGGIORNARE:

Crea un commons-logging.propertiesfile e aggiungi la seguente riga. Assicurati anche che questo file sia nel tuo CLASSPATH.

org.apache.commons.logging.LogFactory = org.apache.commons.logging.impl.Log4jFactory

Aggiunto un file log4j completato e il codice per invocarlo per l'OP. Questo log4j.properties dovrebbe essere nel tuo CLASSPATH. Sto assumendo stdout per il momento.

log4j.configuration=log4j.properties 
log4j.rootLogger=ERROR, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%c] %m%n

log4j.logger.org.apache.http=ERROR

Ecco un po 'di codice che devi aggiungere alla tua classe per invocare il logger.

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; 

public class MyClazz
{
    private Log log = LogFactory.getLog(MyClazz.class);
    //your code for the class
}

Non avevo bisogno di un file log4j.properties prima di provare a utilizzare HttpClient. Ho provato a mettere le tue righe nel mio file src / test / resources / log4j.properties ma non ha fatto alcuna differenza. È anche giusto inserire le opzioni commons.logging in log4j.properties?
Matt Baker,

Sì, la registrazione dei dati comuni è solo un wrapper per log4j. Come si richiama il logger nella classe di test?
CoolBeans,

(Dopo l'aggiornamento) L'ho fatto in modo che la riga sopra fosse l'unica nel mio file log4j.properties e sputasse ancora tutto.
Matt Baker,

1
Non invoco il logger, HttpClient lo fa da solo.
Matt Baker,

Sul link fornito è indicato che "Nota: Log4j non è incluso nella distribuzione HttpClient." Quindi devi sicuramente aggiungerlo al tuo CLASSPATH. Stai vedendo l'output in stdout (console) o in un file di registro? Creerò un file log4h di esempio con codice per invocarlo per te.
CoolBeans,

4

Modo semplice Log4j e HttpCLient (v3.1 in questo caso, dovrebbe funzionare per un livello superiore, potrebbe richiedere modifiche minori)

Assicurati che tutte le dipendenze siano corrette e MD5 i tuoi download !!!!

import org.apache.commons.httpclient.HttpClient;  
import org.apache.log4j.Level;  
import org.apache.log4j.Logger;  

---

Logger.getLogger("org.apache.commons.httpclient").setLevel(Level.WARN);
Logger.getLogger("httpclient.wire.header").setLevel(Level.WARN);
Logger.getLogger("httpclient.wire.content").setLevel(Level.WARN);

HttpClient client = new HttpClient();

Devo metterlo nel mainmetodo?
parsecer,

@parsecer puoi
WiR3D

4

Sono stato afflitto dallo stesso problema da un po 'di tempo e finalmente ho deciso di esaminare questo. Si è scoperto che il problema era che il mio progetto dipendeva da http-builder-0.5.2.jar che raggruppava un file log4j.xml al suo interno. E abbastanza sicuro, il livello di registro per org.apache.http.wire era DEBUG! Il modo in cui l'ho trovato è stato quello di esaminare tutti i file jar nelle mie dipendenze e fare "jar tvf" e cercare grey per log4j.

Mentre questa scoperta ha portato all'eventuale soluzione di portare la versione della mia dipendenza http-builder a 0.6, mi confonde ancora ciò che deve essere passato per la mente dello sviluppatore quando raggruppa il file log4j.xml nel file jar. Ad ogni modo, probabilmente non è rilevante per questo thread per ora. Ma ho pensato che fosse utile menzionare questa soluzione che ho trovato dato che quando stavo cercando una soluzione prima d'ora, la mia non è mai venuta. Eventualmente qualcuno lo troverà utile.


Problema simile durante l'utilizzo <!-- https://mvnrepository.com/artifact/com.fredericboisguerin.excel/excel-reader-writer --> <dependency> <groupId>com.fredericboisguerin.excel</groupId> <artifactId>excel-reader-writer</artifactId> <version>2.1</version> </dependency>. Rimossa la dipendenza e i registri erano spariti. Grazie!
Adom,

3

Ho avuto lo stesso problema con JWebUnit. Si noti che se si utilizza la distribuzione binaria, Logback è un logger predefinito. Per usare log4j con JWebUnit ho eseguito i seguenti passi:

  • vasetti di logback rimossi
  • aggiungi la libreria bridge lod4j per sfl4j - slf4j-log4j12-1.6.4.jar
  • aggiungi log4j.properties

Probabilmente non dovrai rimuovere i barattoli di Logback ma avrai bisogno di qualche passaggio aggiuntivo per forzare slf4j a usare log4j


Grazie, ho avuto lo stesso problema durante l'utilizzo di OpenRdf. Tutti gli altri suggerimenti in questo thread sembrano non avere alcun effetto fino a quando non ho rimosso i vasetti di logback, ora il registro è abbastanza silenzioso.
amarillion

3

Le seguenti 2 righe hanno risolto completamente il mio problema:

Logger.getLogger("org.apache.commons.httpclient").setLevel(Level.ERROR);
Logger.getLogger("httpclient").setLevel(Level.ERROR);

Questo ha funzionato anche per me, ma non avevo bisogno di: Logger.getLogger ("org.apache.commons.httpclient"). SetLevel (Level.ERROR);
Jamel Toms,

3

Aggiungi le righe sottostanti nel file delle proprietà log4j per chiudere i log http: - log4j.logger.org.apache.http = OFF


nei test unitari (se main, quindi in main) aggiungi anche il @BeforeClass public static void BeforeClass() { PropertyConfigurator.configure("log4j.properties"); ...}file log4j.properties con la riga singola log4j.logger.org.apache.http = OFF dovrebbe essere nella radice (appena sopra la cartella src)
Sasha Bond

3

Avevo anche lo stesso problema. L'intera console è stata riempita [main] DEBUG org.apache.http.wiredurante l'esecuzione dei test.

La soluzione che ha funzionato per me è stata creare un logback-test.xml src / test / resources / logback-test.xml come in https://github.com/bonigarcia/webdrivermanager-examples/blob/master/src/test/resources /logback-test.xml (ref - https://github.com/bonigarcia/webdrivermanager/issues/203 )

Per visualizzare le informazioni di registrazione, ho sostituito il logger name = "io.github.bonigarcia" con il nome del mio pacchetto

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <logger name="com.mypackage" level="DEBUG" />
    <logger name="org" level="INFO" />
    <logger name="com" level="INFO" />

    <root level="INFO">
        <appender-ref ref="STDOUT" />
    </root>

</configuration>

2

Sono stato condotto a questo post durante la ricerca di una soluzione per un problema simile. La risposta di Tim è stata molto utile. come Matt Baker, voglio solo chiudere il registro httpClient senza troppa configurazione. Dato che non eravamo sicuri di quale implementazione di registrazione sotto il common-logging fosse usata, la mia soluzione era forzarla usando log4j lanciando il file jar log4j nel percorso di classe. L'impostazione predefinita della configurazione di log4j disattiva l'output di debug di common-httpclient. Naturalmente, per renderlo più robusto, è possibile creare file common-logging.properties e log4j.properties per definire ulteriormente le configurazioni di registrazione.


2

Prova a mettere

org.apache.commons.logging.Log=org.apache.commons.logging.impl.NoOpLog

nelle tue proprietà commons-logging.properties


2

Per apache 4.5.3, se si desidera spostare il livello di tutte le registrazioni client http di Apache su Avvisa , utilizzare:

log4j.logger.org.apache=WARN

2

funziona per me con l'aggiunta di "logback.xml" nel percorso radice della classe e sotto l'impostazione.

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <logger name="org.apache" level="WARN"/>
    <logger name="httpclient" level="WARN"/>
</configuration>

1

Ho avuto lo stesso problema durante l'esecuzione dei test di integrazione jwebunit. Ho risolto escludendo il logback e aggiungendo in slf4j-log4j12, in questo modo:

<dependency>
  <groupId>net.sourceforge.jwebunit</groupId>
  <artifactId>jwebunit-htmlunit-plugin</artifactId>
  <version>3.0</version>
  <exclusions>
    <exclusion>
      <groupId>ch.qos.logback</groupId>
      <artifactId>logback-classic</artifactId>
    </exclusion>
  </exclusions>
</dependency>
<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-log4j12</artifactId>
</dependency>

1

Mi ci sono voluti anni per capire una volta, hai bisogno di questo:

log4j.logger.httpclient.wire=ERROR

Suppongo che HttpClient utilizzi "httpclient.wire" come nome del suo logger, non "org.apache.commons.httpclient".

Bugger subdoli.


1

Questo ha funzionato per me.

System.setProperty("org.apache.commons.logging.Log", "org.apache.commons.logging.impl.SimpleLog");
System.setProperty("org.apache.commons.logging.simplelog.showdatetime", "true");
System.setProperty("org.apache.commons.logging.simplelog.log.httpclient.wire.header", "error");
System.setProperty("org.apache.commons.logging.simplelog.log.org.apache.http", "error");
System.setProperty("log4j.logger.org.apache.http", "error");
System.setProperty("log4j.logger.org.apache.http.wire", "error");
System.setProperty("org.apache.commons.logging.simplelog.log.org.apache.commons.httpclient", "error");

0

La migliore soluzione che ho trovato è stata quella di utilizzare il plug-in Maven Enforcer per evitare che il log comune fosse usato del tutto. Quindi ho aggiunto la dipendenza slf4j per la registrazione. Quindi aggiungi quanto segue al tuo pom.xml

<dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>[your version here]</version>
    </dependency>

e aggiungi anche il plugin maven-enforcer

<plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-enforcer-plugin</artifactId>
           <version>[your version here]</version>
           <executions>
               <execution>
                   <id>enforce</id>
                   <configuration>
                       <rules>
                           <DependencyConvergence />
                           <bannedDependencies>
                               <excludes>
                                   <exclude>commons-logging:commons-logging</exclude>
                               </excludes>
                           </bannedDependencies>
                       </rules>
                   </configuration>
                   <goals>
                       <goal>enforce</goal>
                   </goals>
               </execution>
           </executions>
       </plugin>

Failed to execute goal org.apache.maven.plugins:maven-enforcer-plugin:3.0.0-M2:enforce (enforce) on project gs-serving-web-content: Some Enforcer rules have failed. Look above for specific messages explaining why the rule failed
parsecer,

0

Ho riscontrato questo problema dopo aver impostato HttpComponentsClientHttpRequestFactory per il mio modello di riposo.

L'impostazione di OkHttpClientHttpRequestFactory dovrebbe risolvere il problema con la registrazione dei rifiuti.


0

Basta aggiungere queste due dipendenze nel file pom: ho provato e ci sono riuscito dopo aver provato la discussione prima.

<!--Using logback-->
<dependency>
   <groupId>commons-logging</groupId>
   <artifactId>commons-logging</artifactId>
   <version>1.2</version>
</dependency>
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-logging</artifactId>
</dependency>

Commons-Logging -> Logback e informazioni predefinite mentre Debug non sarà presente; Puoi usare:

private static Logger log = LoggerFactory.getLogger(HuaweiAPI.class);

per definire le informazioni che si desidera registrare: come il risultato finale in questo modo. Saranno presenti solo le informazioni che voglio registrare.


0

Ho provato tutte le soluzioni di cui sopra senza alcun risultato. L'unica soluzione che mi è sembrata più vicina è stata quella che mi ha suggerito di creare un logback.xml. Ha funzionato, tuttavia non è stato registrato nulla. Dopo aver giocato con logback.xml, questo è quello che ho finito

<configuration>
  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <withJansi>true</withJansi>
    <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
    </encoder>
  </appender>
  <root level="INFO">
    <appender-ref ref="STDOUT"/>
  </root>
</configuration>

Ora tutti i livelli inferiori a DEBUG vengono registrati correttamente.


0

Con:

  • Log2J 2 2.11.2
  • HttpClient 4.5.7 (client di riposo elasticsearch 7.0.0)
  • Utilizzo del file delle proprietà per la configurazione

Si può aggiungere:

logger.httpclient.name=org.apache.http
logger.httpclient.level=info

Con "httpclient" nell'esempio precedente è un nome logico scelto.

(Testato sull'applicazione OpenFX Java 11.)


0

Nel mio caso uso la configurazione xml e la aggiungo al file di configurazione

<logger name="org.apache.http">
    <level value="warn"/>
</logger>


0

Per me, le righe sottostanti nel file prop log4j hanno ripulito tutto quel casino che veniva dalla registrazione di HttpClient ... Evviva !!! :)

log4j.logger.org.apache.http.headers=ERROR
log4j.logger.org.apache.http.wire=ERROR
log4j.logger.org.apache.http.impl.conn.PoolingHttpClientConnectionManager=ERROR
log4j.logger.org.apache.http.impl.conn.DefaultManagedHttpClientConnection=ERROR
log4j.logger.org.apache.http.conn.ssl.SSLConnectionSocketFactory=ERROR
log4j.logger.org.springframework.web.client.RestTemplate=ERROR
log4j.logger.org.apache.http.client.protocol.RequestAddCookies=ERROR
log4j.logger.org.apache.http.client.protocol.RequestAuthCache=ERROR
log4j.logger.org.apache.http.impl.execchain.MainClientExec=ERROR
log4j.logger.org.apache.http.impl.conn.DefaultHttpClientConnectionOperator=ERROR
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.