繁体   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