package org.torproject.jtor.logging.impl;
import java.util.HashMap;
import java.util.Map;
import org.torproject.jtor.logging.LogEntry;
import org.torproject.jtor.logging.LogManager;
import org.torproject.jtor.logging.LogReader;
import org.torproject.jtor.logging.Logger;
public class LogManagerImpl implements LogManager, LogReader{
private final Map<String, LoggerImpl> loggers = new HashMap<String, LoggerImpl>();
private final Object readerLock = new Object();
private LogReader logReader = new DefaultConsoleLogReader();
public synchronized Logger getLogger(String name) {
if(!loggers.containsKey(name)) {
loggers.put(name, new LoggerImpl(name, this));
}
return loggers.get(name);
}
public void logRaw(String message) {
synchronized(readerLock) {
if(logReader != null) logReader.logRaw(message);
}
}
public void log(LogEntry entry) {
synchronized(readerLock) {
if(logReader != null) logReader.log(entry);
}
}
public void setLogReader(LogReader reader) {
synchronized(readerLock) {
if(reader == null) {
this.logReader = null;
return;
}
if(logReader instanceof RingBufferLogReader) {
RingBufferLogReader ringBufferReader = (RingBufferLogReader) logReader;
for(LogEntry entry : ringBufferReader) {
reader.log(entry);
}
}
this.logReader = reader;
}
}
}