我在java程序中使用jar文件,它在运行时生成警告。但我不希望我的客户看到这些警告。 如何禁用这些警告。
警告如下:
Sep 25, 2009 10:10:33 PM com.gargoylesoftware.htmlunit.IncorrectnessListenerImpl notify
WARNING: Expected content type of 'application/javascript' or 'application/ecmascript' for remotely loaded JavaScript element at 'http://www.craigslist.org/js/jquery.js', but got 'application/x-javascript'.
答案 0 :(得分:7)
从消息的外观来看,您正在使用HtmlUnit which uses Commons Logging来记录消息。除非您将Commons Logging配置为写入文件,否则日志消息将由Commons Logging的简单记录器记录,该记录将写入控制台。
如果您想让错误消息消失,您可以采用以下任一选项:
答案 1 :(得分:2)
更简单的方法是,无需将Log4j作为依赖项添加,只需重定向STDERR即可。
System.setErr(new PrintStream("/dev/null"));
这就是你真正需要的。
注意:确保在完成HtmlUnit后重置流:
final PrintStream err = new PrintStream(System.err);
System.setErr(new PrintStream("/dev/null"));
// ...
System.setErr(err);
答案 2 :(得分:1)
假设这些是日志消息,您可以配置记录器将所有内容写入null或/ dev / null
在路径中放置这样的文件可能有帮助
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd" >
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="NULL" class="org.apache.log4j.FileAppender">
<param name="File" value="/dev/null"/>
</appender>
<logger name="com.gargoylesoftware.htmlunit">
<level value="FATAL"/>
<appender-ref ref="NULL"/>
</logger>
</log4j:configuration>
答案 3 :(得分:1)
只需复制Vineet发布链接的第一行:
如果您没有显式配置commons日志记录以使用LOG4J或其他日志记录框架,那么它将使用简单的记录器。使用简单记录器时,可以通过设置以下系统属性来更改默认日志记录级别:
System.getProperties().put("org.apache.commons.logging.simplelog.defaultlog","fatal");
在程序开头的某处添加此代码。
答案 4 :(得分:1)
由于OP不断询问如何重定向到/ dev / null:
你可以通过调用System.setOut
和System.setErr
来传递一个类似的效果,传入一个PrintStream
,它不会对它给出的输出做任何事情。
这是一个可怕的黑客攻击,以前的答案远比清晰得多。
答案 5 :(得分:0)
我发现HtmlUnit不包含log4j实现,只有commons记录“interface”(和抽象类)。一旦你在路径上扔了log4j.jar,HtmlUnit就会表现得更好,并且尊重它的配置。