/*******************************************************************************
* Copyright (c) 2010 Bug Labs, Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
* - Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* - Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* - Neither the name of Bug Labs, Inc. nor the names of its contributors may be
* used to endorse or promote products derived from this software without
* specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*******************************************************************************/
package com.buglabs.osgi.log;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.PrintStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.osgi.framework.Bundle;
import org.osgi.framework.ServiceReference;
import org.osgi.service.log.LogEntry;
/**
* A log entry implementation for the LogReaderService.
*
* @author kgilmer
*
*/
class LogEntryImpl implements LogEntry {
private final Bundle bundle;
private final int level;
private final String message;
private final ServiceReference sr;
private final long time;
private final Throwable exception;
private SimpleDateFormat formatter;
private final String dateFormat;
protected LogEntryImpl(Bundle bundle, int level, String message, ServiceReference sr, long time, Throwable exception, String dateFormat) {
this.bundle = bundle;
this.level = level;
this.message = message;
this.sr = sr;
this.time = time;
this.exception = exception;
this.dateFormat = dateFormat;
}
public Bundle getBundle() {
return bundle;
}
public Throwable getException() {
return exception;
}
public int getLevel() {
return level;
}
public String getMessage() {
return message;
}
public ServiceReference getServiceReference() {
return sr;
}
public long getTime() {
return time;
}
/**
* Print a human-readable form of the log entry to a PrintStream.
* @param ps
*/
protected void print(PrintStream ps) {
ps.println(formatTime(time) + " " + getLevelLabel(level) + ": " + message);
if (exception != null) {
exception.printStackTrace(ps);
}
}
public String toString() {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PrintStream ps = new PrintStream(baos);
print(ps);
try {
baos.close();
return baos.toString();
} catch (IOException e) {
return super.toString();
}
}
/**
* @param t
* @return A human-readable date string.
*/
private String formatTime(long t) {
if (formatter == null) {
formatter = new SimpleDateFormat(dateFormat);
}
return formatter.format(new Date(t));
}
/**
* @param level
* @return A human-readable log level string.
*/
private String getLevelLabel(int level) {
switch (level) {
case 1:
return "ERROR ";
case 2:
return "WARNING";
case 3:
return "INFO ";
case 4:
return "DEBUG ";
}
return "UNKNOWN";
}
}