blob: 2795e86a635c97f4935c2e6fb9eb0a9eb2d78987 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2004, 2007 Boeing.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Boeing - initial API and implementation
*******************************************************************************/
package org.eclipse.osee.logger.slf4j.internal;
import org.eclipse.osee.logger.Log;
import org.osgi.framework.Bundle;
import org.osgi.service.component.ComponentContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.slf4j.Marker;
import org.slf4j.MarkerFactory;
/**
* @author Roberto E. Escobar
*/
public class Sfl4jLogImpl implements Log {
private static final int LOG_ERROR = 1;
private static final int LOG_WARNING = 2;
private static final int LOG_INFO = 3;
private static final int LOG_DEBUG = 4;
private static final int LOG_TRACE = 5;
private Logger logger;
private Marker marker;
public void start(ComponentContext context) {
if (logger == null) {
Bundle usingBundle = context.getUsingBundle();
String symbolicName = null;
if (usingBundle != null) {
symbolicName = usingBundle.getSymbolicName();
} else {
symbolicName = "Osee Log";
}
logger = LoggerFactory.getLogger(symbolicName);
marker = MarkerFactory.getMarker(symbolicName);
debug("Logger setup for [%s]", logger.getName());
}
}
public void stop() {
logger = null;
marker = null;
}
private Logger getLogger() {
return logger;
}
@Override
public boolean isTraceEnabled() {
return isEnabled(LOG_TRACE);
}
@Override
public void trace(String format, Object... args) {
trace(null, format, args);
}
@Override
public void trace(Throwable th, String format, Object... args) {
logHelper(LOG_TRACE, th, format, args);
}
@Override
public boolean isDebugEnabled() {
return isEnabled(LOG_DEBUG);
}
@Override
public void debug(String format, Object... args) {
debug(null, format, args);
}
@Override
public void debug(Throwable th, String format, Object... args) {
logHelper(LOG_DEBUG, th, format, args);
}
@Override
public boolean isInfoEnabled() {
return isEnabled(LOG_INFO);
}
@Override
public void info(String format, Object... args) {
info(null, format, args);
}
@Override
public void info(Throwable th, String format, Object... args) {
logHelper(LOG_INFO, th, format, args);
}
@Override
public boolean isWarnEnabled() {
return isEnabled(LOG_WARNING);
}
@Override
public void warn(String format, Object... args) {
warn(null, format, args);
}
@Override
public void warn(Throwable th, String format, Object... args) {
logHelper(LOG_WARNING, th, format, args);
}
@Override
public boolean isErrorEnabled() {
return isEnabled(LOG_ERROR);
}
@Override
public void error(String format, Object... args) {
error(null, format, args);
}
@Override
public void error(Throwable th, String format, Object... args) {
logHelper(LOG_ERROR, th, format, args);
}
private boolean isEnabled(int level) {
boolean result = false;
final Logger logger = getLogger();
if (logger != null) {
switch (level) {
case LOG_DEBUG:
result = logger.isDebugEnabled();
break;
case LOG_ERROR:
result = logger.isErrorEnabled();
break;
case LOG_WARNING:
result = logger.isWarnEnabled();
break;
case LOG_INFO:
result = logger.isInfoEnabled();
break;
default:
result = logger.isTraceEnabled();
break;
}
}
return result;
}
private void logHelper(int level, Throwable th, String format, Object... args) {
logHelper(null, level, th, format, args);
}
private void logHelper(Object context, int level, Throwable th, String format, Object... args) {
final Logger logger = getLogger();
if (isEnabled(level)) {
String message = safeFormat(format, args);
if (message != null) {
switch (level) {
case LOG_DEBUG:
logger.debug(marker, message, th);
break;
case LOG_ERROR:
logger.error(marker, message, th);
break;
case LOG_WARNING:
logger.warn(marker, message, th);
break;
case LOG_INFO:
logger.info(marker, message, th);
break;
default:
logger.trace(marker, message, th);
break;
}
}
}
}
private static String safeFormat(String message, Object... args) {
String toReturn;
try {
toReturn = String.format(message, args);
} catch (RuntimeException ex) {
StringBuilder builder = new StringBuilder();
builder.append("Log message could not be formatted:");
builder.append(message);
builder.append(" with the following arguments [");
builder.append(org.eclipse.osee.framework.jdk.core.util.Collections.toString(",", args));
builder.append("]. Cause [");
builder.append(ex.toString());
builder.append("]");
toReturn = builder.toString();
}
return toReturn;
}
}