public FileRecorder()

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();
    }