package smartnode.utils;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Date;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Queue;
import org.apache.commons.collections4.queue.CircularFifoQueue;
import atdown.Main;
/**
* Created by nogueira on 7/2/14.
*/
public class ATLogger {
BufferedWriter log_file_writer;
Date date;
LogLevel logger_level;
Queue<String> queue = new CircularFifoQueue<String>(10);
public enum LogLevel{
Error, Info, Warning, Debug
}
/**
*
* @param log_file_path
* @param level
*/
public ATLogger(String log_file_path, LogLevel level) {
File log_file = new File(log_file_path);
date = new Date();
//lowest level of the logger is 3.
//TODO add better filtering after
if(level == LogLevel.Debug){
logger_level = LogLevel.Debug;
} else {
logger_level = LogLevel.Error;
}
try {
log_file_writer = new BufferedWriter(new FileWriter(log_file)){
@Override
public void write(String str) throws IOException {
queue.offer(str);
super.write(str);
}
};
} catch (IOException e){
e.printStackTrace();
}
}
/**
*
* @param log_message
* @param level
*/
public void log(String log_message, LogLevel level){
try{
switch (level){
case Error:
logError(log_message);
break;
case Info:
logInfo(log_message);
break;
case Warning:
logWarning(log_message);
break;
case Debug:
if(logger_level == LogLevel.Debug) {
logDebug(log_message);
}
break;
}
}
catch (IOException e){
e.printStackTrace();
}
}
/**
*
* @param message
* @throws IOException
*/
private void logError(String message) throws IOException{
log_file_writer.write(date.toString() + " [Error] " + message + '\n');
log_file_writer.flush();
}
/**
*
* @param message
* @throws IOException
*/
private void logInfo(String message) throws IOException{
log_file_writer.write(date.toString() + " [INFO] " + message + '\n');
log_file_writer.flush();
}
/**
*
* @param message
* @throws IOException
*/
private void logWarning(String message) throws IOException{
log_file_writer.write(date.toString() + " [WARNING] " + message + '\n');
log_file_writer.flush();
}
/**
*
* @param message
* @throws IOException
*/
private void logDebug(String message) throws IOException{
log_file_writer.write(date.toString() + " [DEBUG] " + message + '\n');
log_file_writer.flush();
}
public void printLastLines(){
Main.println("###################################");
Main.println("# Printing recent lines of log");
for (String s: queue){
Main.println("# " + s);
}
}
}