mirror of
https://github.com/SlimeVR/SlimeVR-Server.git
synced 2026-04-05 18:01:56 +02:00
138 lines
2.7 KiB
Java
138 lines
2.7 KiB
Java
package io.eiren.util.logging;
|
|
|
|
import java.util.concurrent.ArrayBlockingQueue;
|
|
import java.util.logging.Level;
|
|
import java.util.logging.Logger;
|
|
|
|
|
|
public class DefaultGLog extends Thread implements IGLog {
|
|
|
|
private final Logger logger;
|
|
|
|
public static class LogEntry {
|
|
|
|
private Level level;
|
|
private String message;
|
|
private Throwable t;
|
|
|
|
public LogEntry(Level level, String message, Throwable t) {
|
|
this(level, message);
|
|
this.t = t;
|
|
}
|
|
|
|
public LogEntry(Level level, String message) {
|
|
this.level = level;
|
|
this.message = message;
|
|
this.t = null;
|
|
}
|
|
|
|
public Level getLevel() {
|
|
return level;
|
|
}
|
|
|
|
public String getMessage() {
|
|
return message;
|
|
}
|
|
|
|
public Throwable getException() {
|
|
return t;
|
|
}
|
|
}
|
|
|
|
private final ArrayBlockingQueue<LogEntry> queue = new ArrayBlockingQueue<LogEntry>(50000);
|
|
private volatile LoggerRecorder recorder;
|
|
|
|
@Override
|
|
public void info(String message) {
|
|
add(new LogEntry(Level.INFO, message));
|
|
}
|
|
|
|
@Override
|
|
public void info(String message, Throwable t) {
|
|
add(new LogEntry(Level.INFO, message, t));
|
|
}
|
|
|
|
@Override
|
|
public void severe(String message) {
|
|
add(new LogEntry(Level.SEVERE, message));
|
|
}
|
|
|
|
@Override
|
|
public void severe(String message, Throwable t) {
|
|
add(new LogEntry(Level.SEVERE, message, t));
|
|
}
|
|
|
|
@Override
|
|
public void warning(String message) {
|
|
add(new LogEntry(Level.WARNING, message));
|
|
}
|
|
|
|
@Override
|
|
public void warning(String message, Throwable t) {
|
|
add(new LogEntry(Level.WARNING, message, t));
|
|
}
|
|
|
|
@Override
|
|
public void debug(String message) {
|
|
add(new LogEntry(Level.INFO, "[DBG] " + message));
|
|
}
|
|
|
|
@Override
|
|
public void debug(String message, Throwable t) {
|
|
add(new LogEntry(Level.INFO, "[DBG] " + message, t));
|
|
}
|
|
|
|
@Override
|
|
public void log(Level level, String message) {
|
|
add(new LogEntry(level, message));
|
|
}
|
|
|
|
@Override
|
|
public void log(Level level, String message, Throwable t) {
|
|
add(new LogEntry(level, message, t));
|
|
}
|
|
|
|
private void add(LogEntry entry) {
|
|
try {
|
|
queue.put(entry);
|
|
} catch (InterruptedException e) {}
|
|
try {
|
|
if (recorder != null)
|
|
recorder.addEntry(entry);
|
|
} catch (NullPointerException e) {}
|
|
}
|
|
|
|
@Override
|
|
public void setRecorder(LoggerRecorder recorder) {
|
|
this.recorder = recorder;
|
|
}
|
|
|
|
@Override
|
|
public LoggerRecorder removeRecorder() {
|
|
LoggerRecorder lr = this.recorder;
|
|
this.recorder = null;
|
|
return lr;
|
|
}
|
|
|
|
public DefaultGLog(Logger logger) {
|
|
super("Logger");
|
|
this.logger = logger;
|
|
this.setDaemon(true);
|
|
this.setPriority(7);
|
|
this.start();
|
|
}
|
|
|
|
@Override
|
|
public void run() {
|
|
while (true) {
|
|
try {
|
|
LogEntry log = queue.take();
|
|
if (log.t != null)
|
|
logger.log(log.level, log.message, log.t);
|
|
else
|
|
logger.log(log.level, log.message);
|
|
} catch (InterruptedException e) {}
|
|
}
|
|
}
|
|
}
|