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 @Override
041 public LogReaderService addingService(
042 ServiceReference<LogReaderService> serviceReference) {
043
044 LogReaderService logReaderService = _bundleContext.getService(
045 serviceReference);
046
047 logReaderService.addLogListener(this);
048
049 return logReaderService;
050 }
051
052 @Override
053 public void logged(LogEntry logEntry) {
054 int level = logEntry.getLevel();
055
056 Bundle bundle = logEntry.getBundle();
057
058 String symbolicName = StringUtil.replace(
059 bundle.getSymbolicName(), StringPool.PERIOD, StringPool.UNDERLINE);
060
061 Log log = LogFactoryUtil.getLog("osgi.logging." + symbolicName);
062
063 String message = logEntry.getMessage();
064
065 ServiceReference<?> serviceReference = logEntry.getServiceReference();
066
067 if (serviceReference != null) {
068 message += " " + serviceReference.toString();
069 }
070
071 if ((level == LogService.LOG_DEBUG) && log.isDebugEnabled()) {
072 log.debug(message, logEntry.getException());
073 }
074 else if ((level == LogService.LOG_ERROR) && log.isErrorEnabled()) {
075 log.error(message, logEntry.getException());
076 }
077 else if ((level == LogService.LOG_INFO) && log.isInfoEnabled()) {
078 log.info(message, logEntry.getException());
079 }
080 else if ((level == LogService.LOG_WARNING) && log.isWarnEnabled()) {
081 log.warn(message, logEntry.getException());
082 }
083 }
084
085 @Override
086 public void modifiedService(
087 ServiceReference<LogReaderService> serviceReference,
088 LogReaderService logReaderService) {
089 }
090
091 @Override
092 public void removedService(
093 ServiceReference<LogReaderService> serviceReference,
094 LogReaderService logReaderService) {
095
096 logReaderService.removeLogListener(this);
097 }
098
099 @Override
100 public void start(BundleContext bundleContext) throws Exception {
101 _bundleContext = bundleContext;
102
103 _serviceTracker =
104 new ServiceTracker<LogReaderService, LogReaderService>(
105 bundleContext, LogReaderService.class, this);
106
107 _serviceTracker.open();
108 }
109
110 @Override
111 public void stop(BundleContext bundleContext) throws Exception {
112 _serviceTracker.close();
113
114 _serviceTracker = null;
115
116 _bundleContext = null;
117 }
118
119 private BundleContext _bundleContext;
120 private ServiceTracker<LogReaderService, LogReaderService> _serviceTracker;
121
122 }