2016-10-07 1 views
0

Ich benutze BrowserMobProxy eingebetteten Modus auf Java mit Selenium.Wie deaktiviere ich net.lightbody.bmp (BrowserMobProxy) Logging-Nachrichten im log4j-Framework?

Wie deaktiviere ich Logmeldungen von BrowserMobProxy, die auf der Konsole erscheinen? Ist es möglich, es irgendwie in log4.properties oder auf andere Weise zu deaktivieren?

Beispiel für nicht mehr benötigte Protokoll in Konsole, die immer angezeigt werden:

/537.36 
Accept: image/webp,image/*,*/*;q=0.8 
Referer: http://something.com/styles/html5-touch-template/main-33a42.css 
Accept-Language: en-US,en;q=0.8 
Cookie: _ga=GA1.2.807057776.1475866489 
Accept-Encoding: gzip, deflate, 
Via: 1.1 browsermobproxy 
2016-10-06 21:28:09 -- ProxyToServerConnection.write(ProxyToServerConnection.java:345) - (AWAITING_INITIAL) [id: 0xe29d0002, L:/112.111.1.11:52907 - R:something.com/333.111.1.11:80]: Using existing connection to: something.com/333.111.1.11:80 
2016-10-06 21:28:09 -- ProxyConnection.doWrite(ProxyConnection.java:228) - (AWAITING_INITIAL) [id: 0xe29d0002, L:/192.168.0.10:52907 - R:something.com/184.180.124.162:80]: Writing: DefaultHttpRequest(decodeResult: success, version: HTTP/1.1) 
GET /styles/html5-touch-template/fonts/HelveticaNeueLTStd-Bd.otf HTTP/1.1 
Host: something.com 
User-Agent 

Log4j:

log4j.rootLogger=INFO, FILE, CONSOLE 
log=src/test/resources 
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender 
log4j.appender.CONSOLE.Threshold=INFO 
log4j.appender.CONSOLE.Target=System.out 
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout 
log4j.appender.CONSOLE.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} -- %C{1}.%M(%F:%L) - %m%n 
log4j.appender.FILE=org.apache.log4j.RollingFileAppender 
log4j.appender.FILE.File=${log}/log.out 
log4j.appender.FILE.MaxFileSize=100KB 
log4j.appender.FILE.MaxBackupIndex=2 
log4j.appender.FILE.Threshold=INFO 
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout 
log4j.appender.FILE.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} -- %-10p %c{1} - %m%n 
log4j.logger.org.apache.http=ERROR 

Bitte helfen EDIT :)

+0

Bitte geben Sie weitere Details an, z. B. den Code, der die Konsolenausgabe generiert, und den Inhalt Ihrer log4j-Konfigurationsdatei –

+0

@ D.B.: aktualisierte meine Frage mit mehr Details. Vielen Dank! – Assarin

Antwort

0

BEGIN:

Ich möchte klarstellen, dass der folgende Vorschlag wird funktioniert nur, wenn die Klasse, die Sie über log4j-Eigenschaften steuern möchten, log4j verwendet, um die Konsolenausgabe zu generieren, die Sie sehen. Wenn dies nicht der Fall ist, können Sie es nicht mit der log4j-Konfiguration steuern.

END EDIT

Nach Ihren log4j.properties Sie haben derzeit nur 2 Logger konfiguriert. Das sind der Root-Logger und der org.apache.http-Logger. Sie können Ihre gewünschten Ergebnisse auf verschiedene Arten erzielen, aber ich werde Ihnen die Lösung anbieten, die ich für die einfachste halte.

Ich schlage vor, Sie konfigurieren einfach einen separaten Logger für das Paket oder die Klasse, die Sie anders als den Rest behandeln möchten, und konfigurieren Sie den Logger dann entsprechend Ihrer Verhaltensweise.

Zum Beispiel hier ist ein einfaches log4j.properties ich zeigen zusammen setzen, wie Sie dies tun können:

log4j.rootLogger=WARN, stdout, R 

#In order to treat the test.Main class differntly, 
#I create a separate logger and configure it to send messages to the rolling file appender only. 
log4j.logger.test.Main=INFO, R 
log4j.additivity.test.Main=false 


## general log 
log4j.appender.R=org.apache.log4j.RollingFileAppender 
log4j.appender.R.File=logs/general.log 
log4j.appender.R.MaxFileSize=1MB 
log4j.appender.R.MaxBackupIndex=1 
log4j.appender.R.layout=org.apache.log4j.PatternLayout 
log4j.appender.R.layout.ConversionPattern=%5p %t %d{ISO8601} %c{2} - %m%n 

# Configure a console appender that will be used for messages of any level 
log4j.appender.stdout=org.apache.log4j.ConsoleAppender 
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 

# Pattern to output the caller's file name and line number. 
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n 

Hier sind einige Klassen diese Konfiguration zu demonstrieren:

Main.java

package test; 

import org.apache.log4j.Logger; 

public class Main { 

    private static final Logger logger = Logger.getLogger(Main.class); 
    public static void main(String[] args) { 
     logger.debug("here's some debug"); 
     logger.info("here's some info"); 
     logger.warn("here's some warn"); 
     logger.error("here's some error"); 
     logger.fatal("here's some fatal"); 
     Main2.main(null); 
    } 

} 

Main2.java

package test; 

import org.apache.log4j.Logger; 

public class Main2 { 
    private static final Logger logger = Logger.getLogger(Main2.class); 
    public static void main(String[] args) { 
     logger.debug("Main2 here's some debug"); 
     logger.info("Main2 here's some info"); 
     logger.warn("Main2 here's some warn"); 
     logger.error("Main2 here's some error"); 
     logger.fatal("Main2 here's some fatal"); 
    } 
} 

Als ich die Main Klasse hier laufen die Konsolenausgabe:

WARN [main] (Main2.java:10) - Main2 here's some warn 
ERROR [main] (Main2.java:11) - Main2 here's some error 
FATAL [main] (Main2.java:12) - Main2 here's some fatal 

Hier ist der Inhalt der Protokolldatei:

INFO main 2016-10-10 22:53:15,534 test.Main - here's some info 
WARN main 2016-10-10 22:53:15,535 test.Main - here's some warn 
ERROR main 2016-10-10 22:53:15,535 test.Main - here's some error 
FATAL main 2016-10-10 22:53:15,535 test.Main - here's some fatal 
WARN main 2016-10-10 22:53:15,537 test.Main2 - Main2 here's some warn 
ERROR main 2016-10-10 22:53:15,540 test.Main2 - Main2 here's some error 
FATAL main 2016-10-10 22:53:15,540 test.Main2 - Main2 here's some fatal 

Beachten Sie, wie Haupt nie an die Konsole druckt, nur in das Protokoll Datei.

0

@ D.B. ich danke Ihnen für Ihre Erklärung. Es ist jetzt klarer für mich. Dieses Problem mit der Protokollierung von browserMob Proxy und einigen anderen Klassen wurde dadurch gelöst, dass slf4j von der browserMob Proxy-Abhängigkeit und einigen anderen Abhängigkeiten ausgeschlossen wurde, da log4j als Hauptprotokollierung die vollständige Protokollierung von Klassen, die slf4j verwenden, nicht deaktiviert.

Verwandte Themen