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

时间:2016-10-07 04:45:40

标签: java maven logging proxy log4j

我正在使用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

请帮助:)

2 个答案:

答案 0 :(得分:0)

开始编辑:

我想澄清一下,只有当您尝试通过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永远不会打印到控制台,只打印到日志文件。

答案 1 :(得分:0)

@ D.B。谢谢你的解释。现在对我来说更清楚了。因此,从browserMob Proxy和其他类中记录的问题是通过从browserMob Proxy依赖项和其他一些依赖项中排除slf4j来解决的,因为log4j作为主日志记录禁用从使用slf4j的类中完全记录。