PP/src/pp.10.02.Logger_solution/src/main/java/pp/ThreadLocalLogger.java

49 lines
1.3 KiB
Java

package pp;
import java.io.FileNotFoundException;
import java.io.PrintStream;
import javax.naming.OperationNotSupportedException;
public class ThreadLocalLogger implements Logging {
private ThreadLocal<Logging> logger = ThreadLocal.withInitial(() -> {
PrintStream out = null;
try {
// jeder Thread bekommt garantiert seinen eigenen PrintStream
out = new PrintStream(Thread.currentThread().threadId() + ".log");
} catch (FileNotFoundException e) {
// Abbruch mit Runtime statt Checked Exception:
throw new RuntimeException(e);
}
return new SimpleLoggerUnsafe(Logging.Severity.Warning, out);
});
@Override
public void log(Severity level, String msg) {
logger.get().log(level, msg);
}
@Override
public void flush() {
logger.get().flush();
}
@Override
public void setSeverityLevel(Severity level) {
logger.get().setSeverityLevel(level);
}
@Override
public Severity getSeverityLevel() {
return logger.get().getSeverityLevel();
}
@Override
public void setPrintStream(PrintStream out) {
// Threads könnten denselben PrintStream verwenden. Damit das nicht
// passiert, wird diese Methode "abgeschaltet".
throw new RuntimeException(new OperationNotSupportedException());
}
}