/******************************************************************************* * Copyright (c) 2006-2010 eBay Inc. All Rights Reserved. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 *******************************************************************************/ package org.ebayopensource.turmeric.runtime.spf.impl.pipeline; import java.util.logging.Level; import org.ebayopensource.turmeric.runtime.common.exceptions.ErrorDataFactory; import org.ebayopensource.turmeric.runtime.common.exceptions.ServiceException; import org.ebayopensource.turmeric.runtime.common.impl.pipeline.BaseLoggingHandler; import org.ebayopensource.turmeric.runtime.common.impl.pipeline.LoggingHandlerUtils; import org.ebayopensource.turmeric.runtime.common.pipeline.LoggingHandlerStage; import org.ebayopensource.turmeric.runtime.common.pipeline.MessageContext; import org.ebayopensource.turmeric.runtime.common.pipeline.MessageProcessingStage; import org.ebayopensource.turmeric.runtime.common.service.ServiceId; import org.ebayopensource.turmeric.runtime.common.types.SOAConstants; import org.ebayopensource.turmeric.runtime.errorlibrary.ErrorConstants; import org.ebayopensource.turmeric.runtime.spf.exceptions.AppErrorWrapperException; import org.ebayopensource.turmeric.runtime.spf.impl.internal.config.ServiceConfigBeanManager; import org.ebayopensource.turmeric.runtime.spf.pipeline.ServerMessageContext; public class ServerLoggingHandler extends BaseLoggingHandler { @Override public void init(InitContext ctx) throws ServiceException { ServiceId svcId = ctx.getServiceId(); if (svcId.isClientSide()) { throw new ServiceException(ErrorDataFactory.createErrorData(ErrorConstants.SVC_FACTORY_CANNOT_USE_ON_CLIENT, ErrorConstants.ERRORDOMAIN, new Object[] {this.getClass().getName(), svcId.getAdminName()})); } super.init(ctx); } @Override protected LoggingHandlerUtils getHandlerUtils() { return new ServerLoggingHandlerUtils(); } @Override public void logProcessingStage(MessageContext ctx, LoggingHandlerStage stage) throws ServiceException { long startTime = System.nanoTime(); try { super.logProcessingStage(ctx, stage); } finally { long duration = System.nanoTime() - startTime; logMetrics(ctx, stage, duration); } } @Override protected Level getErrorLogLevel(MessageContext ctx, Throwable e) throws ServiceException { MessageProcessingStage stage = ctx.getProcessingStage(); if (stage == MessageProcessingStage.RESPONSE_DISPATCH || stage == MessageProcessingStage.RESPONSE_COMPLETE) { // log any dispatch errors as "severe" since // they cannot be delivered to the client return Level.SEVERE; } return super.getErrorLogLevel(ctx, e); } @Override protected Throwable unwrapException(Throwable e) { if (e instanceof AppErrorWrapperException) { AppErrorWrapperException e2 = (AppErrorWrapperException)e; e = e2.getCause(); } return super.unwrapException(e); } @Override protected void addFullCallInfo(MessageContext ctx, LoggingHandlerStage stage, String separator, StringBuilder sb) throws ServiceException { super.addFullCallInfo(ctx, stage, separator, sb); ServerMessageContext serverCtx = (ServerMessageContext)ctx; String version = serverCtx.getServiceVersion(); sb.append(separator); sb.append("SvcVer="); sb.append(version); String clientIP = serverCtx.getClientAddress().getIpAddress(); sb.append(separator); sb.append("ClientIP="); sb.append(clientIP); String sourceIP = (String)ctx.getProperty(SOAConstants.CTX_PROP_TRANSPORT_CLIENT_SOURCE_IP); if (sourceIP != null) { sb.append(separator); sb.append("SourceIP="); sb.append(sourceIP); } String forwardedFor = (String)ctx.getProperty(SOAConstants.CTX_PROP_TRANSPORT_FORWARDED_FOR); if (forwardedFor != null) { sb.append(separator); sb.append("ForwardedFor="); sb.append(forwardedFor); } } // @Override protected String getRequestPayloadLog(MessageContext ctx) { return ServiceConfigBeanManager. getPayloadLogInstance(ctx.getServiceId().getAdminName()).getRequestPayloadLog(); } // @Override protected String getResponsePayloadLog(MessageContext ctx) { return ServiceConfigBeanManager. getPayloadLogInstance(ctx.getServiceId().getAdminName()).getResponsePayloadLog(); } }