Spring Web Services 1.5.2不要将异常登录到日志文件(backlog,spring boot 1.5.2)

时间:2017-03-17 10:45:08

标签: spring spring-boot log4j logback spring-ws

我有终点课程:

@Endpoint
public class GetCustomerEndpoint {

    public static final Logger log = LoggerFactory.getLogger(GetCustomerEndpoint .class);


    @Transactional(value = "transactionManager", readOnly = true)
    @PayloadRoot(namespace = WebServiceConfig.NAMESPACE_URI, localPart = "getCustomerRequest")
    @ResponsePayload
    public GetCustomerResponse getCustomer(@RequestPayload GetCustomerRequest serviceRequest)
        throws ServerFaultException, ClientFaultException, Exception {

            throw new Exception("Exception to log file");
    }

但是当异常抛出时,它会显示在客户端:

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
    <SOAP-ENV:Header/>
    <SOAP-ENV:Body>
        <SOAP-ENV:Fault>
            <faultcode>SOAP-ENV:Server</faultcode>
            <faultstring xml:lang="en">Exception to log file</faultstring>
        </SOAP-ENV:Fault>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

在日志文件或控制台中为空。 我想在这两个地方看到所有异常,并且异常堆栈跟踪也是如此。

在我的日志配置中:

logging.level.org.springframework=INFO

2 个答案:

答案 0 :(得分:0)

您必须在配置文件中添加一个新属性,以映射您要查看日志的包,例如:

logging.level.<package>=INFO

包的位置,或生成日志的类的父包。 您可以更具体地使用某些包,例如:

logging.level.com.test=INFO
logging.level.com.test.model=DEBUG

在这种情况下, com.test 包中的类将显示INFO日志, com.test.model 中的类将显示DEBUG日志。

答案 1 :(得分:0)

默认情况下,Spring-W似乎在日志上不显示任何stacktrace异常(我无法想象为什么)。

对我来说,这仅在注册并设置SoapFaultMappingExceptionResolver bean之后才起作用。例如:

@Bean
public SoapFaultMappingExceptionResolver exceptionResolver() {
    SoapFaultMappingExceptionResolver exceptionResolver = new SoapFaultMappingExceptionResolver();

    SoapFaultDefinition faultDefinition = new SoapFaultDefinition();
    faultDefinition.setFaultCode(SoapFaultDefinition.SERVER);
    exceptionResolver.setDefaultFault(faultDefinition);

    Properties errorMappings = new Properties();
    errorMappings.setProperty(Exception.class.getName(), SoapFaultDefinition.SERVER.toString());
    exceptionResolver.setExceptionMappings(errorMappings);
    exceptionResolver.setOrder(1);
    return exceptionResolver;
}