001/**
002 * Licensed to the Apache Software Foundation (ASF) under one or more
003 * contributor license agreements.  See the NOTICE file distributed with
004 * this work for additional information regarding copyright ownership.
005 * The ASF licenses this file to You under the Apache License, Version 2.0
006 * (the "License"); you may not use this file except in compliance with
007 * the License.  You may obtain a copy of the License at
008 *
009 *      http://www.apache.org/licenses/LICENSE-2.0
010 *
011 * Unless required by applicable law or agreed to in writing, software
012 * distributed under the License is distributed on an "AS IS" BASIS,
013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014 * See the License for the specific language governing permissions and
015 * limitations under the License.
016 */
017package org.apache.camel.builder;
018
019import org.apache.camel.LoggingLevel;
020import org.apache.camel.Processor;
021import org.apache.camel.processor.LoggingErrorHandler;
022import org.apache.camel.processor.RedeliveryPolicy;
023import org.apache.camel.spi.RouteContext;
024import org.apache.camel.util.CamelLogger;
025import org.slf4j.Logger;
026import org.slf4j.LoggerFactory;
027
028/**
029 * Uses the {@link Logger} as an error handler, will log at <tt>ERROR</tt> level by default.
030 *
031 * @version
032 * @deprecated use dead letter channel with a log endpoint
033 */
034@Deprecated
035public class LoggingErrorHandlerBuilder extends ErrorHandlerBuilderSupport {
036    private Logger log = LoggerFactory.getLogger(Logger.class);
037    private LoggingLevel level = LoggingLevel.ERROR;
038
039    public LoggingErrorHandlerBuilder() {
040    }
041
042    public LoggingErrorHandlerBuilder(final Logger log) {
043        this.log = log;
044    }
045
046    public LoggingErrorHandlerBuilder(final Logger log, final LoggingLevel level) {
047        this.log = log;
048        this.level = level;
049    }
050
051    public boolean supportTransacted() {
052        return false;
053    }
054
055    @Override
056    public ErrorHandlerBuilder cloneBuilder() {
057        LoggingErrorHandlerBuilder answer = new LoggingErrorHandlerBuilder();
058        cloneBuilder(answer);
059        return answer;
060    }
061
062    protected void cloneBuilder(LoggingErrorHandlerBuilder other) {
063        super.cloneBuilder(other);
064
065        other.level = level;
066        other.log = log;
067    }
068
069    public Processor createErrorHandler(final RouteContext routeContext, final Processor processor) {
070        CamelLogger logger = new CamelLogger(log, level);
071
072        // configure policy to use the selected logging level, and only log exhausted
073        RedeliveryPolicy policy = new RedeliveryPolicy();
074        policy.setLogExhausted(true);
075        policy.setRetriesExhaustedLogLevel(level);
076        policy.setLogStackTrace(true);
077        policy.setLogRetryAttempted(false);
078        policy.setRetryAttemptedLogLevel(LoggingLevel.OFF);
079        policy.setLogRetryStackTrace(false);
080        policy.setLogContinued(false);
081        policy.setLogHandled(false);
082
083        LoggingErrorHandler handler = new LoggingErrorHandler(routeContext.getCamelContext(), processor, logger,
084                policy, getExceptionPolicyStrategy());
085        configure(routeContext, handler);
086        return handler;
087    }
088
089    public LoggingLevel getLevel() {
090        return level;
091    }
092
093    public void setLevel(final LoggingLevel level) {
094        this.level = level;
095    }
096
097    public Logger getLog() {
098        return log;
099    }
100
101    public void setLog(final Logger log) {
102        this.log = log;
103    }
104
105    public String getLogName() {
106        return log != null ? log.getName() : null;
107    }
108
109    public void setLogName(String logName) {
110        this.log = LoggerFactory.getLogger(logName);
111    }
112
113    public LoggingErrorHandlerBuilder level(final LoggingLevel level) {
114        this.level = level;
115        return this;
116    }
117
118    public LoggingErrorHandlerBuilder log(final Logger log) {
119        this.log = log;
120        return this;
121    }
122
123    public LoggingErrorHandlerBuilder logName(final String logName) {
124        setLogName(logName);
125        return this;
126    }
127
128}