防止Apache CXF在日志中转储PDF内容

时间:2015-03-24 18:06:03

标签: logging cxf

我正在使用Apache CXF库2.7.7版。我的问题是默认日志记录功能转储PDF文件的原始内容。我希望将PDF内容记录为“--- Binary Content ---”,就像其他二进制内容一样。

我已经通过将这些行添加到我的Spring上下文来配置CXF日志记录。

<cxf:bus>
    <cxf:features>
        <cxf:logging/>
    </cxf:features>
</cxf:bus>

当我的服务输出PDF文件时,我将Content-Type设置为application/pdf

似乎问题来自org.apache.cxf.interceptor.AbstractLoggingInterceptor,它定义了一个名为BINARY_CONTENT_MEDIA_TYPES的列表,它不认为application/pdf是二进制MIME类型。

1 个答案:

答案 0 :(得分:1)

我有类似的问题,而不是以尴尬的方式实施。

import org.apache.commons.lang3.StringUtils;
import org.apache.cxf.interceptor.LoggingOutInterceptor;
import org.apache.cxf.interceptor.LoggingMessage;

public class KPLogOutInterceptor extends LoggingOutInterceptor {

    @Override
    protected String formatLoggingMessage(LoggingMessage loggingMessage) {

        return removePayload(loggingMessage.toString()); 
    }


    private String removePayload(String str){

        StringBuilder builder = new StringBuilder(str);
        if (str.indexOf("Payload:") + 9 > 8) {
            builder.setLength(builder.indexOf("Payload:") + 8);
            builder.append(" <content skipped>\n");
            builder.append(StringUtils.repeat('-', 25));
        }
        return builder.toString();  
    }
}

cxf配置

<cxf:bus>
        <cxf:inInterceptors>
            <ref bean="inInterceptor" />
        </cxf:inInterceptors>
        <cxf:outInterceptors>
            <ref bean="outInterceptor" />
        </cxf:outInterceptors>
        <cxf:outFaultInterceptors>
            <ref bean="outInterceptor" />
        </cxf:outFaultInterceptors>
        <cxf:inFaultInterceptors>
            <ref bean="inInterceptor" />
        </cxf:inFaultInterceptors>
</cxf:bus>

<bean id="inInterceptor" class="org.apache.cxf.interceptor.LoggingInInterceptor" />
<bean id="outInterceptor" class="com.kp.KPLogOutInterceptor"></bean>