forked from Parallele_Programmierung/Labs
49 lines
1.3 KiB
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());
|
|
}
|
|
}
|