001 /**
002 *
003 * Licensed to the Apache Software Foundation (ASF) under one or more
004 * contributor license agreements. See the NOTICE file distributed with
005 * this work for additional information regarding copyright ownership.
006 * The ASF licenses this file to You under the Apache License, Version 2.0
007 * (the "License"); you may not use this file except in compliance with
008 * the License. You may obtain a copy of the License at
009 *
010 * http://www.apache.org/licenses/LICENSE-2.0
011 *
012 * Unless required by applicable law or agreed to in writing, software
013 * distributed under the License is distributed on an "AS IS" BASIS,
014 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
015 * See the License for the specific language governing permissions and
016 * limitations under the License.
017 */
018 package org.apache.camel.processor;
019
020 import org.apache.camel.Exchange;
021 import org.apache.camel.Processor;
022 import org.apache.commons.logging.Log;
023 import org.apache.commons.logging.LogFactory;
024
025 /**
026 * A {@link Processor} which just logs to a {@link Log} object which can be used as an exception
027 * handler instead of using a dead letter queue.
028 *
029 * @version $Revision: 534145 $
030 */
031 public class Logger implements Processor {
032 private Log log;
033 private LoggingLevel level;
034
035 public Logger() {
036 this(LogFactory.getLog(Logger.class));
037 }
038
039 public Logger(Log log) {
040 this(log, LoggingLevel.INFO);
041 }
042
043 public Logger(Log log, LoggingLevel level) {
044 this.log = log;
045 this.level = level;
046 }
047
048 @Override
049 public String toString() {
050 return "Logger[" + log + "]";
051 }
052
053 public void process(Exchange exchange) {
054 switch (level) {
055 case DEBUG:
056 if (log.isDebugEnabled()) {
057 log.debug(logMessage(exchange));
058 }
059 break;
060 case ERROR:
061 if (log.isErrorEnabled()) {
062 log.error(logMessage(exchange));
063 }
064 break;
065 case FATAL:
066 if (log.isFatalEnabled()) {
067 log.fatal(logMessage(exchange));
068 }
069 break;
070 case INFO:
071 if (log.isInfoEnabled()) {
072 log.debug(logMessage(exchange));
073 }
074 break;
075 case TRACE:
076 if (log.isTraceEnabled()) {
077 log.trace(logMessage(exchange));
078 }
079 break;
080 case WARN:
081 if (log.isWarnEnabled()) {
082 log.warn(logMessage(exchange));
083 }
084 break;
085 default:
086 log.error("Unknown level: " + level + " when trying to log exchange: " + logMessage(exchange));
087 }
088 }
089
090 public void log(String message) {
091 switch (level) {
092 case DEBUG:
093 if (log.isDebugEnabled()) {
094 log.debug(message);
095 }
096 break;
097 case ERROR:
098 if (log.isErrorEnabled()) {
099 log.error(message);
100 }
101 break;
102 case FATAL:
103 if (log.isFatalEnabled()) {
104 log.fatal(message);
105 }
106 break;
107 case INFO:
108 if (log.isInfoEnabled()) {
109 log.debug(message);
110 }
111 break;
112 case TRACE:
113 if (log.isTraceEnabled()) {
114 log.trace(message);
115 }
116 break;
117 case WARN:
118 if (log.isWarnEnabled()) {
119 log.warn(message);
120 }
121 break;
122 default:
123 log.error("Unknown level: " + level + " when trying to log exchange: " + message);
124 }
125 }
126
127 public void log(String message, Throwable exception) {
128 switch (level) {
129 case DEBUG:
130 if (log.isDebugEnabled()) {
131 log.debug(message, exception);
132 }
133 break;
134 case ERROR:
135 if (log.isErrorEnabled()) {
136 log.error(message, exception);
137 }
138 break;
139 case FATAL:
140 if (log.isFatalEnabled()) {
141 log.fatal(message, exception);
142 }
143 break;
144 case INFO:
145 if (log.isInfoEnabled()) {
146 log.debug(message, exception);
147 }
148 break;
149 case TRACE:
150 if (log.isTraceEnabled()) {
151 log.trace(message, exception);
152 }
153 break;
154 case WARN:
155 if (log.isWarnEnabled()) {
156 log.warn(message, exception);
157 }
158 break;
159 default:
160 log.error("Unknown level: " + level + " when trying to log exchange: " + message, exception);
161 }
162 }
163
164 protected Object logMessage(Exchange exchange) {
165 return exchange;
166 }
167
168 public Log getLog() {
169 return log;
170 }
171
172 public void setLog(Log log) {
173 this.log = log;
174 }
175
176 public LoggingLevel getLevel() {
177 return level;
178 }
179
180 public void setLevel(LoggingLevel level) {
181 this.level = level;
182 }
183 }