1/* 2 * Copyright (c) 2004-2005 QOS.ch 3 * 4 * All rights reserved. 5 * 6 * Permission is hereby granted, free of charge, to any person obtaining 7 * a copy of this software and associated documentation files (the 8 * "Software"), to deal in the Software without restriction, including 9 * without limitation the rights to use, copy, modify, merge, publish, 10 * distribute, and/or sell copies of the Software, and to permit persons 11 * to whom the Software is furnished to do so, provided that the above 12 * copyright notice(s) and this permission notice appear in all copies of 13 * the Software and that both the above copyright notice(s) and this 14 * permission notice appear in supporting documentation. 15 * 16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 17 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 18 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT 19 * OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR 20 * HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY 21 * SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER 22 * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF 23 * CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN 24 * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 25 * 26 * Except as contained in this notice, the name of a copyright holder 27 * shall not be used in advertising or otherwise to promote the sale, use 28 * or other dealings in this Software without prior written authorization 29 * of the copyright holder. 30 * 31 */ 32 33package org.slf4j.osgi.logservice.impl; 34 35import org.osgi.framework.Bundle; 36import org.osgi.framework.ServiceReference; 37import org.osgi.framework.Version; 38import org.osgi.service.log.LogService; 39import org.slf4j.Logger; 40import org.slf4j.LoggerFactory; 41 42/** 43 * <code>LogServiceImpl</code> is a simple OSGi LogService implementation that delegates to a slf4j 44 * Logger. 45 * 46 * @author John Conlon 47 * @author Matt Bishop 48 */ 49public class LogServiceImpl implements LogService { 50 51 private static final String UNKNOWN = "[Unknown]"; 52 53 private final Logger delegate; 54 55 /** 56 * Creates a new instance of LogServiceImpl. 57 * 58 * @param bundle The bundle to create a new LogService for. 59 */ 60 public LogServiceImpl(Bundle bundle) { 61 62 String name = bundle.getSymbolicName(); 63 Version version = bundle.getVersion(); 64 if (version == null) { 65 version = Version.emptyVersion; 66 } 67 delegate = LoggerFactory.getLogger(name + '.' + version); 68 } 69 70 /* 71 * (non-Javadoc) 72 * 73 * @see org.osgi.service.log.LogService#log(int, java.lang.String) 74 */ 75 public void log(int level, String message) { 76 77 switch (level) { 78 case LOG_DEBUG: 79 delegate.debug(message); 80 break; 81 case LOG_ERROR: 82 delegate.error(message); 83 break; 84 case LOG_INFO: 85 delegate.info(message); 86 break; 87 case LOG_WARNING: 88 delegate.warn(message); 89 break; 90 default: 91 break; 92 } 93 } 94 95 /* 96 * (non-Javadoc) 97 * 98 * @see org.osgi.service.log.LogService#log(int, java.lang.String, java.lang.Throwable) 99 */ 100 public void log(int level, String message, Throwable exception) { 101 102 switch (level) { 103 case LOG_DEBUG: 104 delegate.debug(message, exception); 105 break; 106 case LOG_ERROR: 107 delegate.error(message, exception); 108 break; 109 case LOG_INFO: 110 delegate.info(message, exception); 111 break; 112 case LOG_WARNING: 113 delegate.warn(message, exception); 114 break; 115 default: 116 break; 117 } 118 } 119 120 /* 121 * (non-Javadoc) 122 * 123 * @see org.osgi.service.log.LogService#log(org.osgi.framework.ServiceReference, int, java.lang.String) 124 */ 125 public void log(ServiceReference sr, int level, String message) { 126 127 switch (level) { 128 case LOG_DEBUG: 129 if (delegate.isDebugEnabled()) { 130 delegate.debug(createMessage(sr, message)); 131 } 132 break; 133 case LOG_ERROR: 134 if (delegate.isErrorEnabled()) { 135 delegate.error(createMessage(sr, message)); 136 } 137 break; 138 case LOG_INFO: 139 if (delegate.isInfoEnabled()) { 140 delegate.info(createMessage(sr, message)); 141 } 142 break; 143 case LOG_WARNING: 144 if (delegate.isWarnEnabled()) { 145 delegate.warn(createMessage(sr, message)); 146 } 147 break; 148 default: 149 break; 150 } 151 } 152 153 /** 154 * Formats the log message to indicate the service sending it, if known. 155 * 156 * @param sr the ServiceReference sending the message. 157 * @param message The message to log. 158 * @return The formatted log message. 159 */ 160 private String createMessage(ServiceReference sr, String message) { 161 162 StringBuilder output = new StringBuilder(); 163 if (sr != null) { 164 output.append('[').append(sr.toString()).append(']'); 165 } else { 166 output.append(UNKNOWN); 167 } 168 output.append(message); 169 170 return output.toString(); 171 } 172 173 /* 174 * (non-Javadoc) 175 * 176 * @see org.osgi.service.log.LogService#log(org.osgi.framework.ServiceReference, int, java.lang.String, 177 * java.lang.Throwable) 178 */ 179 public void log(ServiceReference sr, int level, String message, Throwable exception) { 180 181 switch (level) { 182 case LOG_DEBUG: 183 if (delegate.isDebugEnabled()) { 184 delegate.debug(createMessage(sr, message), exception); 185 } 186 break; 187 case LOG_ERROR: 188 if (delegate.isErrorEnabled()) { 189 delegate.error(createMessage(sr, message), exception); 190 } 191 break; 192 case LOG_INFO: 193 if (delegate.isInfoEnabled()) { 194 delegate.info(createMessage(sr, message), exception); 195 } 196 break; 197 case LOG_WARNING: 198 if (delegate.isWarnEnabled()) { 199 delegate.warn(createMessage(sr, message), exception); 200 } 201 break; 202 default: 203 break; 204 } 205 } 206} 207