簡體   English   中英

如何在log4j框架中禁用net.lightbody.bmp(BrowserMobProxy)日志記錄消息?

[英]How do I disable net.lightbody.bmp (BrowserMobProxy) logging messages in log4j framework?

我在帶有Selenium的Java上使用BrowserMobProxy嵌入式模式。

如何禁用來自出現在控制台上的BrowserMobProxy的日志消息? 是否可以通過log4.properties或其他方式禁用它?

總是出現的不必要的登錄控制台示例:

 /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

請幫忙 :)

開始編輯:

我想澄清一下,以下建議僅在您嘗試通過log4j屬性控制的類實際上使用log4j生成您所看到的控制台輸出時才有效。 如果不是,則無法使用log4j配置對其進行控制。

結束編輯

根據您的log4j.properties,您當前僅配置了2個記錄器。 這些是根記錄器和org.apache.http記錄器。 您可以通過多種方式獲得理想的結果,但是我將提供我認為是最簡單的解決方案。

我建議您只為要與其他軟件包或類區別對待的包或類配置一個單獨的記錄器,然后根據您希望它的行為配置該記錄器。

例如,這是一個簡單的log4j.properties,我將它們放在一起以說明如何執行此操作:

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

以下是一些類來演示此配置:

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");
    }
}

當我運行Main類時,這是控制台輸出:

 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

這是日志文件的內容:

 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

注意Main是如何從不打印到控制台的,而僅打印到日志文件的。

@DB感謝您的解釋。 現在對我來說更清楚了。 因此,通過從browserMob Proxy依賴項和其他一些依賴項中排除slf4j可以解決從browserMob Proxy和其他一些類進行日志記錄的問題,因為log4j作為主要日志記錄無法完全禁止使用slf4j的類進行日志記錄。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM