001/* 002 * Copyright (c) 2004-2005 QOS.ch 003 * 004 * All rights reserved. 005 * 006 * Permission is hereby granted, free of charge, to any person obtaining 007 * a copy of this software and associated documentation files (the 008 * "Software"), to deal in the Software without restriction, including 009 * without limitation the rights to use, copy, modify, merge, publish, 010 * distribute, and/or sell copies of the Software, and to permit persons 011 * to whom the Software is furnished to do so, provided that the above 012 * copyright notice(s) and this permission notice appear in all copies of 013 * the Software and that both the above copyright notice(s) and this 014 * permission notice appear in supporting documentation. 015 * 016 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 017 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 018 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT 019 * OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR 020 * HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY 021 * SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER 022 * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF 023 * CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN 024 * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 025 * 026 * Except as contained in this notice, the name of a copyright holder 027 * shall not be used in advertising or otherwise to promote the sale, use 028 * or other dealings in this Software without prior written authorization 029 * of the copyright holder. 030 * 031 */ 032 033package org.slf4j.osgi.logservice.impl; 034 035import org.osgi.framework.Bundle; 036import org.osgi.framework.ServiceReference; 037import org.osgi.framework.Version; 038import org.osgi.service.log.LogService; 039import org.slf4j.Logger; 040import org.slf4j.LoggerFactory; 041 042/** 043 * <code>LogServiceImpl</code> is a simple OSGi LogService implementation that delegates to a slf4j 044 * Logger. 045 * 046 * @author John Conlon 047 * @author Matt Bishop 048 */ 049public class LogServiceImpl implements LogService { 050 051 private static final String UNKNOWN = "[Unknown]"; 052 053 private final Logger delegate; 054 055 /** 056 * Creates a new instance of LogServiceImpl. 057 * 058 * @param bundle The bundle to create a new LogService for. 059 */ 060 public LogServiceImpl(Bundle bundle) { 061 062 String name = bundle.getSymbolicName(); 063 Version version = bundle.getVersion(); 064 if (version == null) { 065 version = Version.emptyVersion; 066 } 067 delegate = LoggerFactory.getLogger(name + '.' + version); 068 } 069 070 /* 071 * (non-Javadoc) 072 * 073 * @see org.osgi.service.log.LogService#log(int, java.lang.String) 074 */ 075 public void log(int level, String message) { 076 077 switch (level) { 078 case LOG_DEBUG: 079 delegate.debug(message); 080 break; 081 case LOG_ERROR: 082 delegate.error(message); 083 break; 084 case LOG_INFO: 085 delegate.info(message); 086 break; 087 case LOG_WARNING: 088 delegate.warn(message); 089 break; 090 default: 091 break; 092 } 093 } 094 095 /* 096 * (non-Javadoc) 097 * 098 * @see org.osgi.service.log.LogService#log(int, java.lang.String, java.lang.Throwable) 099 */ 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}