/*
* Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
*
* WSO2 Inc. licenses this file to you 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
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.synapse.mediators;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.synapse.MessageContext;
import org.apache.synapse.SynapseConstants;
import org.apache.synapse.SynapseLog;
/**
* Concrete implementation of the {@link SynapseLog} interface appropriate
* for usage in a mediator. Instances of this class should not be created
* directly but by using the factory method
* {@link AbstractMediator#getLog(org.apache.synapse.MessageContext)}.
* <p>
* Note that this is work in progress.
* Please refer to https://issues.apache.org/jira/browse/SYNAPSE-374 for
* more information.
*/
public class MediatorLog implements SynapseLog {
private static final Log traceLog = LogFactory.getLog(SynapseConstants.TRACE_LOGGER);
private final Log defaultLog;
private final boolean traceOn;
private final MessageContext synCtx;
// The definition of this constructor might change...
public MediatorLog(Log defaultLog, boolean traceOn, MessageContext synCtx) {
this.defaultLog = defaultLog;
this.traceOn = traceOn;
this.synCtx = synCtx;
}
public boolean isTraceOrDebugEnabled() {
return isTraceEnabled() || isDebugEnabled();
}
public boolean isDebugEnabled() {
return defaultLog.isDebugEnabled();
}
public boolean isTraceEnabled() {
return traceOn;
}
/**
* Log a message to the default log at level DEBUG and and to the trace log
* at level INFO if trace is enabled for the mediator.
*/
public void traceOrDebug(Object msg) {
if (traceOn) {
traceLog.info(msg);
}
defaultLog.debug(msg);
}
/**
* Log a message at level WARN to the default log, if level DEBUG is enabled,
* and to the trace log, if trace is enabled for the mediator.
*/
public void traceOrDebugWarn(Object msg) {
if (traceOn) {
traceLog.warn(msg);
}
if (defaultLog.isDebugEnabled()) {
defaultLog.warn(msg);
}
}
public boolean isTraceTraceEnabled() {
return traceOn && traceLog.isTraceEnabled();
}
/**
* Log a message to the trace log at level TRACE if trace is enabled for the mediator.
*/
public void traceTrace(Object msg) {
if (traceOn) {
traceLog.trace(msg);
}
}
/**
* Log a message at level INFO to all available/enabled logs.
*/
public void auditLog(Object msg) {
defaultLog.info(msg);
if (synCtx.getServiceLog() != null) {
synCtx.getServiceLog().info(msg);
}
if (traceOn) {
traceLog.info(msg);
}
}
/**
* Log a message at level DEBUG to all available/enabled logs.
*/
public void auditDebug(Object msg) {
defaultLog.debug(msg);
if (synCtx.getServiceLog() != null) {
synCtx.getServiceLog().debug(msg);
}
if (traceOn) {
traceLog.debug(msg);
}
}
/**
* Log a message at level TRACE to all available/enabled logs.
*/
public void auditTrace(Object msg) {
defaultLog.trace(msg);
if (synCtx.getServiceLog() != null) {
synCtx.getServiceLog().trace(msg);
}
if (traceOn) {
traceLog.trace(msg);
}
}
/**
* Log a message at level WARN to all available/enabled logs.
*/
public void auditWarn(Object msg) {
defaultLog.warn(msg);
if (synCtx.getServiceLog() != null) {
synCtx.getServiceLog().warn(msg);
}
if (traceOn) {
traceLog.warn(msg);
}
}
/**
* Log a message at level ERROR to all available/enabled logs.
*/
public void auditError(Object msg) {
defaultLog.error(msg);
if (synCtx.getServiceLog() != null) {
synCtx.getServiceLog().error(msg);
}
if (traceOn) {
traceLog.error(msg);
}
}
/**
* Log a message at level FATAL to all available/enabled logs.
*/
public void auditFatal(Object msg) {
defaultLog.fatal(msg);
if (synCtx.getServiceLog() != null) {
synCtx.getServiceLog().fatal(msg);
}
if (traceOn) {
traceLog.fatal(msg);
}
}
/**
* Log a message at level ERROR to the default log and to the trace, if trace is enabled.
*/
public void error(Object msg) {
defaultLog.error(msg);
if (traceOn) {
traceLog.error(msg);
}
}
/**
* Log a message at level ERROR to the default log, the service log and the trace, if trace
* is enabled.
*/
public void logSynapseException(String msg, Throwable cause) {
defaultLog.error(msg, cause);
if (synCtx.getServiceLog() != null) {
synCtx.getServiceLog().error(msg, cause);
}
if (traceOn) {
traceLog.error(msg, cause);
}
}
}