【问题标题】:Redirect output logs of javax.xml.ws and com.sun.xml.ws重定向 javax.xml.ws 和 com.sun.xml.ws 的输出日志
【发布时间】:2010-05-18 14:59:42
【问题描述】:

我正在使用 Sun 的 Metro 开发基于 SOAP 的 Web 服务。

我遇到了一个烦人的错误,每次我向我的 Web 服务发送格式错误的 SOAP 对象时,sun 的 api 都会向 System.out 发送垃圾邮件,其中的日志如下:

javax.xml.ws.WebServiceException:com.sun.istack.XMLStreamException2:org.xml.sax.SAXParseException:cvc-complex-type.4:属性“类型”必须出现在元素“对象”上。 在 com.sun.xml.ws.util.pipe.AbstractSchemaValidationTube.doProcess(AbstractSchemaValidationTube.java:206) 在 com.sun.xml.ws.util.pipe.AbstractSchemaValidationTube.processRequest(AbstractSchemaValidationTube.java:175) 在 com.sun.xml.ws.api.pipe.Fiber.__doRun(Fiber.java:595) 在 com.sun.xml.ws.api.pipe.Fiber._doRun(Fiber.java:554) 在 com.sun.xml.ws.api.pipe.Fiber.doRun(Fiber.java:539) 在 com.sun.xml.ws.api.pipe.Fiber.runSync(Fiber.java:436) 在 com.sun.xml.ws.server.WSEndpointImpl$2.process(WSEndpointImpl.java:243) 在 com.sun.xml.ws.transport.http.HttpAdapter$HttpToolkit.handle(HttpAdapter.java:444) 在 com.sun.xml.ws.transport.http.HttpAdapter.handle(HttpAdapter.java:244) 在 com.sun.xml.ws.transport.http.server.WSHttpHandler.handleExchange(WSHttpHandler.java:106) 在 com.sun.xml.ws.transport.http.server.WSHttpHandler.handle(WSHttpHandler.java:91) 在 com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:65) 在 sun.net.httpserver.AuthFilter.doFilter(AuthFilter.java:54) 在 com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:68) 在 sun.net.httpserver.ServerImpl$Exchange$LinkHandler.handle(ServerImpl.java:555) 在 com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:65) 在 sun.net.httpserver.ServerImpl$Exchange.run(ServerImpl.java:527) 在 sun.net.httpserver.ServerImpl$DefaultExecutor.execute(ServerImpl.java:119) 在 sun.net.httpserver.ServerImpl$Dispatcher.handle(ServerImpl.java:349) 在 sun.net.httpserver.ServerImpl$Dispatcher.run(ServerImpl.java:321) 在 java.lang.Thread.run(Thread.java:619) 引起:com.sun.istack.XMLStreamException2:org.xml.sax.SAXParseException:cvc-complex-type.4:属性“类型”必须出现在元素“对象”上。 在 com.sun.xml.ws.util.xml.StAXSource$1.parse(StAXSource.java:185) 在 com.sun.xml.ws.util.xml.StAXSource$1.parse(StAXSource.java:170) 在 org.apache.xerces.jaxp.validation.ValidatorHandlerImpl.validate(未知来源) 在 org.apache.xerces.jaxp.validation.ValidatorImpl.validate(未知来源) 在 javax.xml.validation.Validator.validate(Validator.java:127) 在 com.sun.xml.ws.util.pipe.AbstractSchemaValidationTube.doProcess(AbstractSchemaValidationTube.java:204) ... 20 更多

我想关闭此日志或将其重定向到 log4j 使用的我的 error/warn/debug.log 文件。

我试图在我的 log4j.xml 文件中添加一条规则:

<category name="javax.xml.ws">
 <priority value="error" />
</category>

没用。

所以我尝试了以下技巧:

java.util.logging.Logger.getLogger("javax.xml.ws.WebServiceException").setLevel(
            java.util.logging.Level.OFF);

也没有用。

有什么想法吗?

这不是什么大问题,但它使我的 catalina.log 越来越大,不适合放置这种日志。

克里斯

【问题讨论】:

  • 我正在调查 Metro 源代码是否存在类似问题。看来 System.out 的输出是硬编码的,不能轻易更改。

标签: java logging log4j jax-ws


【解决方案1】:

最坏情况解决方案:

System.setOut(new PrintStream(new FileOutputStream("debug.log")));

【讨论】:

  • 谢谢 Chris 就我而言,我应该使用 System.setErr 而不是 System.setOut 如果我找不到更好的解决方案,我会选择这个
猜你喜欢
  • 2015-11-25
  • 2017-07-14
  • 2014-08-10
  • 1970-01-01
  • 2019-03-20
  • 1970-01-01
  • 2016-10-07
  • 2019-08-21
  • 1970-01-01
相关资源
最近更新 更多