package com.netifera.platform.log.internal;
import java.util.HashMap;
import java.util.Map;
import org.osgi.service.component.ComponentContext;
import com.netifera.platform.api.log.ILogEntry;
import com.netifera.platform.api.log.ILogManager;
import com.netifera.platform.api.log.ILogReader;
import com.netifera.platform.api.log.ILogger;
public class LogManager implements ILogManager, ILogReader {
private final Map<String, ILogger> loggers = new HashMap<String, ILogger>();
private ILogReader logReader = new DefaultConsoleLogReader();
protected void activate(ComponentContext context) {
if(System.getProperty("netifera.consolelog") != null) {
logReader = new DefaultConsoleLogReader();
} else {
logReader = new RingBufferReader();
}
}
protected void deactivate(ComponentContext context) {
}
public synchronized ILogger getLogger(String name) {
if(!loggers.containsKey(name)) {
loggers.put(name, new Logger(name, this));
}
return loggers.get(name);
}
public void logRaw(String message) {
if(logReader != null) {
synchronized(logReader) {
logReader.logRaw(message);
}
}
}
public void log(ILogEntry entry) {
if(logReader != null) {
synchronized(logReader) {
logReader.log(entry);
}
}
}
public void setLogReader(ILogReader reader) {
if(reader == null) {
this.logReader = reader;
return;
}
synchronized(logReader) {
if(logReader instanceof RingBufferReader) {
RingBufferReader ringBufferReader = (RingBufferReader) logReader;
for(ILogEntry entry : ringBufferReader) {
reader.log(entry);
}
}
this.logReader = reader;
}
}
}