OpenDataPhillyFinal / src / edu / upenn / cit594 / logging / Logger.java
Logger.java
Raw
package edu.upenn.cit594.logging;

import java.io.File;
import java.io.FileWriter;
import java.io.PrintStream;
import java.io.PrintWriter;

import edu.upenn.cit594.ui.UserInterface;

public class Logger {
	
	private PrintWriter output;
	private static PrintStream err = System.err;
	
	private Logger() {}
	private static Logger instance = new Logger();
	private String filePath;
	private File file;
	
	
	public static Logger getInstance() {
		return instance;
	}
	
	
		
	public void log(String text) {
		try {
			FileWriter fileWriter = new FileWriter(this.file, true);
			output = new PrintWriter(fileWriter);
			logCurrentTime();
			
			fileWriter.write(text);
			flush();
			fileWriter.close();
			
		} catch (Exception e) {
			logError(text);
			return;
		}
		
	}
		
	public boolean setFile(String file_path) {
		this.filePath = file_path;
		try {
			//String[] parse_file_parts = file_path.split("\\.");
			//String parse_file_extension = parse_file_parts[parse_file_parts.length-1].toLowerCase();
			this.file = new File(this.filePath);
			this.file.createNewFile(); 
			
			if (!this.file.canRead()) {
				UserInterface.print("Log file can not be read.");
				return false;
			} else if (!this.file.canWrite()) {
				UserInterface.print("Log file can not be written to.");
				return false;
			} else {
				return true;
			}
		} catch (Exception e) {
			UserInterface.print(e.getMessage());
			return false;
		}
	}
	
	public static void logError(String errorMsg) {
		//System.setErr(err);
		err.println(errorMsg);
	}
	
	
	/**
	 * Helper function that lets the logger prepend each event with a time stamp 
	 */
	private void logCurrentTime() {
		output.print(System.currentTimeMillis() + " ");
	}
	
	/**
	 * Logs new line and flushes the current output
	 */
	private void flush() {
		output.println();
		output.flush();
	}
	
	

	
	
}