com.liferay.logbridge.LogBridge.java Source code

Java tutorial

Introduction

Here is the source code for com.liferay.logbridge.LogBridge.java

Source

/**
 * Copyright (c) 2000-present Liferay, Inc. All rights reserved.
 *
 * This library is free software; you can redistribute it and/or modify it under
 * the terms of the GNU Lesser General Public License as published by the Free
 * Software Foundation; either version 2.1 of the License, or (at your option)
 * any later version.
 *
 * This library is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
 * details.
 */

package com.liferay.logbridge;

import com.liferay.portal.kernel.log.Log;
import com.liferay.portal.kernel.log.LogFactoryUtil;
import com.liferay.portal.kernel.util.StringPool;
import com.liferay.portal.kernel.util.StringUtil;

import org.osgi.framework.Bundle;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceReference;
import org.osgi.service.log.LogEntry;
import org.osgi.service.log.LogListener;
import org.osgi.service.log.LogReaderService;
import org.osgi.service.log.LogService;
import org.osgi.util.tracker.ServiceTracker;
import org.osgi.util.tracker.ServiceTrackerCustomizer;

/**
 * @author Raymond Aug
 */
public class LogBridge
        implements BundleActivator, LogListener, ServiceTrackerCustomizer<LogReaderService, LogReaderService> {

    public LogReaderService addingService(ServiceReference<LogReaderService> serviceReference) {

        LogReaderService logReaderService = _bundleContext.getService(serviceReference);

        logReaderService.addLogListener(this);

        return logReaderService;
    }

    public void logged(LogEntry logEntry) {
        int level = logEntry.getLevel();

        Bundle bundle = logEntry.getBundle();

        String symbolicName = StringUtil.replace(bundle.getSymbolicName(), StringPool.PERIOD, StringPool.UNDERLINE);

        Log log = LogFactoryUtil.getLog("osgi.logging." + symbolicName);

        String message = logEntry.getMessage();

        ServiceReference<?> serviceReference = logEntry.getServiceReference();

        if (serviceReference != null) {
            message += " " + serviceReference.toString();
        }

        if ((level == LogService.LOG_DEBUG) && log.isDebugEnabled()) {
            log.debug(message, logEntry.getException());
        } else if ((level == LogService.LOG_ERROR) && log.isErrorEnabled()) {
            log.error(message, logEntry.getException());
        } else if ((level == LogService.LOG_INFO) && log.isInfoEnabled()) {
            log.info(message, logEntry.getException());
        } else if ((level == LogService.LOG_WARNING) && log.isWarnEnabled()) {
            log.warn(message, logEntry.getException());
        }
    }

    public void modifiedService(ServiceReference<LogReaderService> serviceReference,
            LogReaderService logReaderService) {
    }

    public void removedService(ServiceReference<LogReaderService> serviceReference,
            LogReaderService logReaderService) {

        logReaderService.removeLogListener(this);
    }

    public void start(BundleContext bundleContext) throws Exception {
        _bundleContext = bundleContext;

        _serviceTracker = new ServiceTracker<LogReaderService, LogReaderService>(bundleContext,
                LogReaderService.class, this);

        _serviceTracker.open();
    }

    public void stop(BundleContext bundleContext) throws Exception {
        _bundleContext = null;

        _serviceTracker.close();

        _serviceTracker = null;
    }

    private BundleContext _bundleContext;
    private ServiceTracker<LogReaderService, LogReaderService> _serviceTracker;

}