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 */ 017 package org.apache.camel.util; 018 019 import org.apache.camel.LoggingLevel; 020 import org.slf4j.Logger; 021 import org.slf4j.LoggerFactory; 022 import org.slf4j.Marker; 023 import org.slf4j.MarkerFactory; 024 025 /** 026 * A logger which logs to a slf4j {@link Logger}. 027 * <p/> 028 * The name <tt>CamelLogger</tt> has been chosen to avoid any name clash with log kits 029 * which has a <tt>Logger</tt> class. 030 * 031 * @version 032 */ 033 public class CamelLogger { 034 private Logger log; 035 private LoggingLevel level; 036 private Marker marker; 037 038 public CamelLogger() { 039 this(LoggerFactory.getLogger(CamelLogger.class)); 040 } 041 042 public CamelLogger(Logger log) { 043 this(log, LoggingLevel.INFO); 044 } 045 046 public CamelLogger(Logger log, LoggingLevel level) { 047 this(log, level, null); 048 } 049 050 public CamelLogger(Logger log, LoggingLevel level, String marker) { 051 this.log = log; 052 setLevel(level); 053 setMarker(marker); 054 } 055 056 public CamelLogger(String logName) { 057 this(LoggerFactory.getLogger(logName)); 058 } 059 060 public CamelLogger(String logName, LoggingLevel level) { 061 this(logName, level, null); 062 } 063 064 public CamelLogger(String logName, LoggingLevel level, String marker) { 065 this(LoggerFactory.getLogger(logName), level, marker); 066 } 067 068 @Override 069 public String toString() { 070 return "Logger[" + log + "]"; 071 } 072 073 public void log(String message, LoggingLevel loggingLevel) { 074 LoggingLevel oldLogLevel = getLevel(); 075 setLevel(loggingLevel); 076 log(message); 077 setLevel(oldLogLevel); 078 } 079 080 /** 081 * Logs the message <b>with</b> checking the {@link #shouldLog()} method first. 082 * 083 * @param message the message to log, if {@link #shouldLog()} returned <tt>true</tt> 084 */ 085 public void log(String message) { 086 if (shouldLog(log, level)) { 087 log(log, level, marker, message); 088 } 089 } 090 091 /** 092 * Logs the message <b>without</b> checking the {@link #shouldLog()} method first. 093 * 094 * @param message the message to log 095 */ 096 public void doLog(String message) { 097 log(log, level, marker, message); 098 } 099 100 public void log(String message, Throwable exception, LoggingLevel loggingLevel) { 101 log(log, loggingLevel, marker, message, exception); 102 } 103 104 public void log(String message, Throwable exception) { 105 if (shouldLog(log, level)) { 106 log(log, level, marker, message, exception); 107 } 108 } 109 110 public Logger getLog() { 111 return log; 112 } 113 114 public void setLog(Logger log) { 115 this.log = log; 116 } 117 118 public LoggingLevel getLevel() { 119 return level; 120 } 121 122 public void setLevel(LoggingLevel level) { 123 if (level == null) { 124 throw new IllegalArgumentException("Log level may not be null"); 125 } 126 127 this.level = level; 128 } 129 130 public void setLogName(String logName) { 131 this.log = LoggerFactory.getLogger(logName); 132 } 133 134 public void setMarker(Marker marker) { 135 this.marker = marker; 136 } 137 138 public void setMarker(String marker) { 139 if (ObjectHelper.isNotEmpty(marker)) { 140 this.marker = MarkerFactory.getMarker(marker); 141 } else { 142 this.marker = null; 143 } 144 } 145 146 public static void log(Logger log, LoggingLevel level, String message) { 147 switch (level) { 148 case DEBUG: 149 log.debug(message); 150 break; 151 case ERROR: 152 log.error(message); 153 break; 154 case INFO: 155 log.info(message); 156 break; 157 case TRACE: 158 log.trace(message); 159 break; 160 case WARN: 161 log.warn(message); 162 break; 163 default: 164 } 165 } 166 167 public static void log(Logger log, LoggingLevel level, Marker marker, String message) { 168 switch (level) { 169 case DEBUG: 170 log.debug(marker, message); 171 break; 172 case ERROR: 173 log.error(marker, message); 174 break; 175 case INFO: 176 log.info(marker, message); 177 break; 178 case TRACE: 179 log.trace(marker, message); 180 break; 181 case WARN: 182 log.warn(marker, message); 183 break; 184 default: 185 } 186 } 187 188 public static void log(Logger log, LoggingLevel level, String message, Throwable th) { 189 switch (level) { 190 case DEBUG: 191 log.debug(message, th); 192 break; 193 case ERROR: 194 log.error(message, th); 195 break; 196 case INFO: 197 log.info(message, th); 198 break; 199 case TRACE: 200 log.trace(message, th); 201 break; 202 case WARN: 203 log.warn(message, th); 204 break; 205 default: 206 } 207 } 208 209 public static void log(Logger log, LoggingLevel level, Marker marker, String message, Throwable th) { 210 switch (level) { 211 case DEBUG: 212 log.debug(marker, message, th); 213 break; 214 case ERROR: 215 log.error(marker, message, th); 216 break; 217 case INFO: 218 log.info(marker, message, th); 219 break; 220 case TRACE: 221 log.trace(marker, message, th); 222 break; 223 case WARN: 224 log.warn(marker, message, th); 225 break; 226 default: 227 } 228 } 229 230 public boolean shouldLog() { 231 return CamelLogger.shouldLog(log, level); 232 } 233 234 public static boolean shouldLog(Logger log, LoggingLevel level) { 235 switch (level) { 236 case DEBUG: 237 return log.isDebugEnabled(); 238 case ERROR: 239 return log.isErrorEnabled(); 240 case INFO: 241 return log.isInfoEnabled(); 242 case TRACE: 243 return log.isTraceEnabled(); 244 case WARN: 245 return log.isWarnEnabled(); 246 default: 247 } 248 return false; 249 } 250 }