我正在使用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类型。
答案 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>