in metrics-core/src/main/java/software/amazon/swage/metrics/record/file/FileRecorder.java [74:114]
public FileRecorder(final String filename) {
this.outPath = Paths.get(filename);
this.logQueue = new LinkedBlockingQueue<>();
//TODO: take an injected executor, or maybe use common fork/join pool
this.writeThread = new Thread() {
@Override
public void run() {
Writer writer = new RollingFileWriter(outPath.getParent(), outPath.getFileName().toString());
while (running.get() || !logQueue.isEmpty()) {
try {
String line = logQueue.take();
writer.write(line);
//TODO: periodic/appropriate flushing
writer.flush();
} catch (IOException e) {
log.warn("Problem writing metrics to file log", e);
continue;
} catch (InterruptedException e) {
// thread interrupted while waiting to take, attempt cleanup
running.set(false);
// Preserve interrupt status
Thread.currentThread().interrupt();
}
}
try {
writer.close();
} catch (IOException e) {
log.warn("Problem closing metric file writer", e);
}
}
};
running.set(true);
writeThread.start();
}