package org.primftpd.log; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.PrintStream; import java.util.HashMap; import java.util.Map; import org.slf4j.ILoggerFactory; import org.slf4j.Logger; import android.os.Environment; public class CsvLoggerFactory implements ILoggerFactory { private final Map<String, Logger> loggerMap = new HashMap<String, Logger>(); private final ILoggerFactory nopLoggerFactory; private PrintStream file; public CsvLoggerFactory(ILoggerFactory nopLoggerFactory) { this.nopLoggerFactory = nopLoggerFactory; } @Override public Logger getLogger(String name) { Logger logger = null; try { // protect against concurrent access of the loggerMap synchronized (this) { logger = loggerMap.get(name); if (logger == null) { if (file == null) { file = openFile(); } logger = new CsvLogger(name, file); loggerMap.put(name, logger); } } } catch (FileNotFoundException e) { logger = nopLoggerFactory.getLogger(name); } return logger; } private PrintStream openFile() throws FileNotFoundException { File dir = Environment.getExternalStorageDirectory(); File file = new File(dir, "prim-ftpd-log.csv"); // note: this is never closed return new PrintStream(new FileOutputStream(file, true)); } }