package org.geogebra.desktop.util;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.Calendar;
import java.util.GregorianCalendar;
import org.geogebra.common.util.debug.Log;
/**
* @author Zoltan Kovacs <zoltan@geogebra.org> Web implementation for the
* GeoGebraLogger
*/
public class LoggerD extends Log {
private File logFile = null; // default
private BufferedWriter logFileWriter = null;
/**
* Constructor
*/
public LoggerD() {
keepLog = true;
}
@Override
protected String getTimeInfoImpl() {
Calendar calendar = new GregorianCalendar();
int min = calendar.get(Calendar.MINUTE);
String minS = (min < 10) ? "0" + min : "" + min;
int sec = calendar.get(Calendar.SECOND);
String secS = (sec < 10) ? "0" + sec : "" + sec;
int msec = calendar.get(Calendar.MILLISECOND);
String msecS = (msec < 100) ? "0" + msec : "" + msec;
if (msec < 10) {
msecS = "0" + msecS;
}
return calendar.get(Calendar.HOUR_OF_DAY) + ":" + minS + ":" + secS
+ "." + msecS;
}
@Override
public String getMemoryInfo() {
long usedK = (Runtime.getRuntime().totalMemory()
- Runtime.getRuntime().freeMemory()) / 1024;
return ("\n free memory: ") + Runtime.getRuntime().freeMemory()
+ " total memory: " + Runtime.getRuntime().totalMemory()
+ " max memory: " + Runtime.getRuntime().maxMemory()
+ "\n used memory (total-free): " + usedK + "K";
}
@Override
public void setLogFileImpl(String logFileName) {
if (logFile != null && logFileWriter != null) {
try {
logFileWriter.close();
} catch (IOException e) {
log(WARN, "Previous log file cannot be closed", 1);
}
}
logFile = new File(logFileName);
try {
logFileWriter = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream(logFile), "UTF-8"));
} catch (IOException e) {
log(WARN, "Log file " + logFileName + "cannot be opened", 1);
}
}
@Override
protected void print(String logEntry, Level level) {
if (getLogDestination() == LogDestination.FILE) {
if (logFileWriter != null) {
try {
logFileWriter.append(logEntry + "\n");
logFileWriter.flush();
return;
} catch (IOException e) {
// Falling back to use CONSOLE instead:
setLogDestination(LogDestination.CONSOLE);
log(WARN, "Error writing log file", 1);
// Trying again (recursive call):
print(logEntry, level);
return;
}
}
setLogDestination(LogDestination.CONSOLE);
}
if (getLogDestination() == LogDestination.CONSOLE) {
if (level.getPriority() <= ERROR.getPriority()) {
System.err.println(logEntry);
} else {
System.out.println(logEntry);
}
return;
}
}
@Override
public void doPrintStacktrace(String message) {
try {
// message null check done in caller
throw new Exception(message);
} catch (Exception e) {
e.printStackTrace();
}
}
}