Files
CustomNPC-Plus/src/main/java/noppes/npcs/LogWriter.java
T

101 lines
3.0 KiB
Java
Raw Normal View History

2018-09-13 12:03:28 -04:00
package noppes.npcs;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintStream;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.logging.ConsoleHandler;
import java.util.logging.Formatter;
import java.util.logging.Handler;
import java.util.logging.Level;
import java.util.logging.LogRecord;
import java.util.logging.Logger;
import java.util.logging.StreamHandler;
public class LogWriter {
private final static String name = "CustomNPCs";
private final static Logger logger = Logger.getLogger(name);
private final static SimpleDateFormat dateformat = new SimpleDateFormat("HH:mm:ss");
private static Handler handler;
static {
try {
File dir = new File("logs");
if(!dir.exists())
dir.mkdir();
File file = new File(dir, name + "-latest.log");
File lock = new File(dir, name + "-latest.log.lck");
File file1 = new File(dir, name + "-1.log");
File file2 = new File(dir, name + "-2.log");
File file3 = new File(dir, name + "-3.log");
if(lock.exists())
lock.delete();
if(file3.exists())
file3.delete();
if(file2.exists())
file2.renameTo(file3);
if(file1.exists())
file1.renameTo(file2);
if(file.exists())
file.renameTo(file1);
handler = new StreamHandler(new FileOutputStream(file), new Formatter() {
@Override
public String format(LogRecord record) {
StackTraceElement element = Thread.currentThread().getStackTrace()[8];
String line = "[" + element.getClassName() + ":" + element.getLineNumber() + "] ";
String time = "[" + dateformat.format(new Date(record.getMillis())) + "][" + record.getLevel() + "]" + line;
if(record.getThrown() != null){
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
record.getThrown().printStackTrace(pw);
return time + sw.toString();
}
return time + record.getMessage() + System.getProperty("line.separator");
}
});
handler.setLevel(Level.ALL);
logger.addHandler(handler);
logger.setUseParentHandlers(false);
Handler consoleHandler = new ConsoleHandler();
consoleHandler.setFormatter(handler.getFormatter());
consoleHandler.setLevel(Level.ALL);
logger.addHandler(consoleHandler);
logger.setLevel(Level.ALL);
info(new Date().toString());
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void info(Object msg) {
logger.log(Level.FINE, msg.toString());
handler.flush();
}
public static void error(Object msg) {
logger.log(Level.SEVERE, msg.toString());
handler.flush();
}
public static void error(Object msg, Exception e) {
logger.log(Level.SEVERE, msg.toString());
logger.log(Level.SEVERE, e.getMessage(), e);
handler.flush();
}
public static void except(Exception e) {
logger.log(Level.SEVERE, e.getMessage(), e);
handler.flush();
}
}