当前位置: 首页 > 面试题库 >

硒很多日志(如何删除)

凌和悦
2023-03-14
问题内容

我在 Firefox 48上 尝试了 Selenium 3.0.1。

我已经尝试了以下代码:

java.util.logging.Logger.getLogger(“
com.gargoylesoftware.htmlunit”)。setLevel(Level.OFF);
java.util.logging.Logger.getLogger(“
org.apache.commons.httpclient”)。setLevel(Level.OFF);
java.util.logging.Logger.getLogger(ProtocolHandshake.class.getName())。setLevel(Level.OFF);

但是一旦我在 Netbeans 下运行常规测试,…日志仍然出现:

Dec 02, 2016 9:17:53 AM org.openqa.selenium.remote.ProtocolHandshake createSession
INFO: Attempting bi-dialect session, assuming Postel's Law holds true on the remote end
Dec 02, 2016 9:17:57 AM org.openqa.selenium.remote.ProtocolHandshake createSession
INFO: Detected dialect: OSS

有解决这个问题的线索吗?


问题答案:

您必须将记录器固定在内存中或设置logging.properties配置文件。从java.util.logging.Logger文档中:

可以通过调用getLogger工厂方法之一获取Logger对象。这些将创建一个新的Logger或返回一个合适的现有Logger。重要的是要注意,如果没有保留对Logger的强引用,则随时可能会垃圾回收由getLogger工厂方法之一返回的Logger。

当返回新的记录器时,日志级别由LogManager确定,默认情况下,LogManager使用logging.properties文件中的设置。在您的示例中,可能会看到以下内容:

  1. 调用getLogger创建一个新的记录器,并从LogManager设置级别。
  2. 您的代码将记录器级别设置为OFF。
  3. GC会运行并破坏您的记录器以及您刚刚应用的设置。
  4. Selenium调用getLogger并创建一个新的记录器,并从LogManager设置级别。

这是一个示例测试案例,以证明这一点:

    public static void main(String[] args) {
        String name = "com.gargoylesoftware.htmlunit";
        for (int i = 0; i < 5; i++) {
            System.out.println(Logger.getLogger(name).getLevel());
            Logger.getLogger(name).setLevel(Level.OFF);
            System.runFinalization();
            System.gc();
            System.runFinalization();
            Thread.yield();
        }
    }

将输出null而不是OFF

如果您通过保持强烈的参考力来固定记录器,那么步骤3就永远不会发生,Selenium应该找到您创建的记录器,并将其级别设置为OFF。

private static final Logger[] pin;
static {
    pin = new Logger[]{
        Logger.getLogger("com.gargoylesoftware.htmlunit"),
        Logger.getLogger("org.apache.commons.httpclient"),
        Logger.getLogger("org.openqa.selenium.remote.ProtocolHandshake")
    };

    for (Logger l : pin) {
        l.setLevel(Level.OFF);
    }
}


 类似资料:
  • 问题内容: 我在 Firefox 48上 尝试了 Selenium 3.0.1。 我已经尝试了以下代码: java.util.logging.Logger.getLogger(“ com.gargoylesoftware.htmlunit”)。setLevel(Level.OFF); java.util.logging.Logger.getLogger(“ org.apache.commons.h

  • (F.Y.I.我已经在互联网上搜索了很多文档。我正在使用storm-0.10.0-beta1。storm中log4j2的配置文件是worker.xml) 现在,我尝试使用log4j2。 我正在寻找删除旧日志的方法,但我找不到。部分配置如下。 起初,我期望删除超过3天的日志文件。 但事实上,事实并非如此。 所以,我想知道是否有办法删除旧日志。 如果有一条路我还没有找到,请通知我。

  • 我们正在一个mobilefirst 6.3项目中工作,我们的.war安装在liberty profile服务器中。 我们以前没有在analytics上配置TTL。有没有任何方法(工具、rest服务或文件系统),我可以删除MobileFirst中的分析日志。

  • 下面是下一个gc日志(第一行是我执行的时间减去应用程序停止工作的时间)。 在时,该应用程序再次停止工作。 然后我再次使用命令,应用程序再次返回ok。 下面是结果文件中的一个特殊线程。除了in_vm之外,所有线程的状态都被阻塞。 这里是我的环境。

  • 我正在使用logback.xml实现SLF4J日志记录,但应用程序正在创建多个日志文件。我需要为一个日期创建一个单一的日志文件,所有的日志级别都在相同的日志文件中。 下面是我的logback.xml配置。

  • 我在SpringBoot中使用logback,但无法删除旧的日志文件。 我在logback-spring.xml文件中定义了以下appender: 即使我设置了“MaxHistory”和“CleanHistoryonStart”,超过10天的日志文件也不会被删除。既不是翻转也不是启动。