001
014
015 package com.liferay.portal.module.framework;
016
017 import com.liferay.portal.kernel.log.Log;
018 import com.liferay.portal.kernel.log.LogFactoryUtil;
019 import com.liferay.portal.kernel.util.StringPool;
020 import com.liferay.portal.kernel.util.StringUtil;
021
022 import org.osgi.framework.Bundle;
023 import org.osgi.framework.BundleActivator;
024 import org.osgi.framework.BundleContext;
025 import org.osgi.framework.ServiceReference;
026 import org.osgi.service.log.LogEntry;
027 import org.osgi.service.log.LogListener;
028 import org.osgi.service.log.LogReaderService;
029 import org.osgi.service.log.LogService;
030 import org.osgi.util.tracker.ServiceTracker;
031 import org.osgi.util.tracker.ServiceTrackerCustomizer;
032
033
036 public class LogBridge
037 implements BundleActivator, LogListener,
038 ServiceTrackerCustomizer<LogReaderService, LogReaderService> {
039
040 public LogReaderService addingService(
041 ServiceReference<LogReaderService> serviceReference) {
042
043 LogReaderService logReaderService = _bundleContext.getService(
044 serviceReference);
045
046 logReaderService.addLogListener(this);
047
048 return logReaderService;
049 }
050
051 public void logged(LogEntry logEntry) {
052 int level = logEntry.getLevel();
053
054 Bundle bundle = logEntry.getBundle();
055
056 String symbolicName = StringUtil.replace(
057 bundle.getSymbolicName(), StringPool.PERIOD, StringPool.UNDERLINE);
058
059 Log log = LogFactoryUtil.getLog("osgi.logging." + symbolicName);
060
061 String message = logEntry.getMessage();
062
063 ServiceReference<?> serviceReference = logEntry.getServiceReference();
064
065 if (serviceReference != null) {
066 message += " " + serviceReference.toString();
067 }
068
069 if ((level == LogService.LOG_DEBUG) && log.isDebugEnabled()) {
070 log.debug(message, logEntry.getException());
071 }
072 else if ((level == LogService.LOG_ERROR) && log.isErrorEnabled()) {
073 log.error(message, logEntry.getException());
074 }
075 else if ((level == LogService.LOG_INFO) && log.isInfoEnabled()) {
076 log.info(message, logEntry.getException());
077 }
078 else if ((level == LogService.LOG_WARNING) && log.isWarnEnabled()) {
079 log.warn(message, logEntry.getException());
080 }
081 }
082
083 public void modifiedService(
084 ServiceReference<LogReaderService> serviceReference,
085 LogReaderService logReaderService) {
086 }
087
088 public void removedService(
089 ServiceReference<LogReaderService> serviceReference,
090 LogReaderService logReaderService) {
091
092 logReaderService.removeLogListener(this);
093 }
094
095 public void start(BundleContext bundleContext) throws Exception {
096 _bundleContext = bundleContext;
097
098 _serviceTracker =
099 new ServiceTracker<LogReaderService, LogReaderService>(
100 bundleContext, LogReaderService.class, this);
101
102 _serviceTracker.open();
103 }
104
105 public void stop(BundleContext bundleContext) throws Exception {
106 _serviceTracker.close();
107
108 _serviceTracker = null;
109
110 _bundleContext = null;
111 }
112
113 private BundleContext _bundleContext;
114 private ServiceTracker<LogReaderService, LogReaderService> _serviceTracker;
115
116 }