2016-11-07 3 views
1

J'utilise org.apache.log4j.Logger et je souhaite désactiver les messages de débogage pour htmlunit. Rien de ce que je fais ne semble fonctionner. Je continue à recevoir des messages de débogage Http.wire, Http.headers, etc. Je l'enregistreur racine ce déboguerJe ne peux pas désactiver la journalisation HtmlUnit

J'ai essayé de placer cette ligne dans mon code:

org.apache.log4j.Logger.getLogger("com.gargoylesoftware.htmlunit").setLevel(org.apache.log4j.Level.OFF); 

J'ai aussi essayé de placer cette ligne dans mon fichier log4j.properties:

log4j.logger.com.gargoylesoftware.htmlunit=WARN 

C'est le contenu de mon fichier log4j.properties:

log4j.logger.com.gargoylesoftware.htmlunit=ERROR 

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


# Tell the root lodger what appenders and level to use 
log4j.rootLogger=DEBUG, A1, A2 


##### Console Appender ##### 

log4j.appender.A1=org.apache.log4j.ConsoleAppender 
log4j.appender.A1.layout=org.apache.log4j.PatternLayout 
log4j.appender.A1.layout.ConversionPattern=%d %-5p [%t] %-17c{2} (%13F:%L) %3x - %m%n 


##### File Appender ##### 

log4j.appender.A2=org.apache.log4j.FileAppender 
log4j.appender.A2.File=/var/log/mylogfile.log 
log4j.appender.A2.layout=org.apache.log4j.PatternLayout 
log4j.appender.A2.layout.ConversionPattern=%d %-5p [%t] %-17c{2} (%13F:%L) %3x - %m%n 
log4j.appender.A2.Append=false 

Toute aide serait appréciée.

Modifier 15.11.16 (Ajout de code de test)

import com.gargoylesoftware.htmlunit.*; 
import com.gargoylesoftware.htmlunit.html.*; 

import org.junit.*; 
import static org.junit.Assert.*; 

import org.apache.commons.logging.*; 
import org.apache.log4j.*; 

public class Test01 
{ 
    @Test 
    public void homePage() throws Exception 
    { 
     LogFactory.getFactory().setAttribute("com.gargoylesoftware.htmlunit", "org.apache.commons.logging.impl.Log4JLogger"); 
     LogFactory.getFactory().setAttribute("org.apache.commons.logging.Log", "org.apache.commons.logging.impl.Log4JLogger"); 


     org.apache.log4j.Logger.getLogger("com.gargoylesoftware.htmlunit").setLevel(Level.WARN); 
     org.apache.log4j.Logger.getLogger("org.apache.commons.httpclient").setLevel(Level.WARN); 

     Logger.getRootLogger().setLevel(Level.DEBUG); 


     Logger.getRootLogger().debug("Start"); 

     WebClient webClient = new WebClient() 

     HtmlPage page = webClient.getPage("https://google.com"); 

     Logger.getRootLogger().debug("End"); 
    } 

Répondre

0

Donc, après beaucoup d'expériences et d'observation de la bûche sortie, j'ai compris cela. Comme il s'avère que la documentation pour HttpClient sur le Apache HTTPCLient website est incorrecte (en fait, il existe des liens rompus). Il s'avère que les noms des enregistreurs utilisés par HTTPClient ne sont pas spécifiés dans le document. Le nom de racine de l'enregistreur correct est "http" et non "httpclient", ce qui signifie que tous les essais que j'ai effectués n'ont eu aucun effet. J'utilise org.apache.httpcomponents.httpclient_4.5.2 et org.apache.httpcomponents.httpcore_4.4.5 ce qui est aujourd'hui (15/11/16).

Voici un exemple de fichier log4j.properties qui permettra un contrôle précis de l'exploitation forestière de HTMLClient

# Tell the root logger what appenders and level to use 
log4j.rootLogger=DEBUG, A1, A2 


# Controls detailed wire protocol 
log4j.logger.org.apache.http.wire=WARN 

# Controls headers (good for debugging) 
log4j.logger.org.apache.http.headers=WARN 

# Controls http context (what you are sending and geting) 
log4j.logger.org.apache.http=WARN 

# Controls htmlunit details 
log4j.logger.com.gargoylesoftware.htmlunit=WARN 


##### Console Appender ##### 

log4j.appender.A1=org.apache.log4j.ConsoleAppender 
log4j.appender.A1.layout=org.apache.log4j.PatternLayout 
log4j.appender.A1.layout.ConversionPattern=%d %-5p [%t] %-17c{2} (%13F:%L) %3x - %m%n 


##### File Appender ##### 

log4j.appender.A2=org.apache.log4j.FileAppender 
log4j.appender.A2.File=mylogfile.log 
log4j.appender.A2.layout=org.apache.log4j.PatternLayout 
log4j.appender.A2.layout.ConversionPattern=%d %-5p [%t] %-17c{2} (%13F:%L) %3x - %m%n 
log4j.appender.A2.Append=false 
0

Pour log4j, vous devez définir log4j.logger.com.gargoylesoftware.htmlunit-ERROR:

log4j.logger.com.gargoylesoftware.htmlunit=ERROR 

Deuxième option: dans votre code, ajoutez après avoir déclaré votre client Web:

LogFactory.getFactory().setAttribute("org.apache.commons.logging.Log", "org.apache.commons.logging.impl.NoOpLog"); 

java.util.logging.Logger.getLogger("com.gargoylesoftware.htmlunit").setLevel(Level.OFF); 
java.util.logging.Logger.getLogger("org.apache.commons.httpclient").setLevel(Level.OFF); 
+0

Merci pour avoir l'aide. log4j.logger.com.gargoylesoftware.htmlunit = ERREUR dans le fichier de propriétés ne fait rien. Les extraits de code fonctionnent mais désactivent les journaux de débogage de l'enregistreur racine. J'ai essayé SimpleLog et aussi Log4JLogger sans chance. Je n'arrive pas à comprendre pourquoi les paramètres de mon fichier log4j.properties ne peuvent pas définir différents niveaux pour différents enregistreurs. J'ai mis à jour ma question originale avec le fichier log4j.properties que j'utilise. – zappullae

+0

BTW. J'ai le même problème avec les détails de fil de html de notation d'Authorize.net. – zappullae

+0

Après avoir expérimenté cela, il semble que seul l'enregistreur de racine est utilisé. La définition des niveaux et des attributs de org.apache.commons.logging.Log et de com.gargoylesoftware.htmlunit n'a aucun effet. La seule chose qui fonctionne est si je mets un niveau dans le fichier log4j.properties ou si je fais un Logger.getRootLogger(). SetLevel (Level.WARN). Ces deux solutions affectent tous les enregistrements, pas seulement ceux que je voudrais contrôler. Cela ne peut pas être si difficile à faire, ai-je oublié quelque chose? – zappullae