package org.nutz.log.impl;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.nutz.log.Log;
import org.nutz.log.LogAdapter;
import org.nutz.plugin.Plugin;
public class SystemLogAdapter implements LogAdapter, Plugin {
public Log getLogger(String className) {
return SystemLog.me();
}
public boolean canWork() {
return true;
}
/**
* 默认的Log,输出到System.out和System.err
*
* @author Young(sunonfire@gmail.com)
* @author Wendal(wendal1985@gmail.com)
*/
public static class SystemLog extends AbstractLog {
private final static SystemLog me = new SystemLog();
private final static DateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
private static boolean warned;
static SystemLog me() {
if (! warned) {
me.warn("!!You are using default SystemLog! Don't use it in Production environment!!");
warned = true;
}
return me;
}
private SystemLog() {
isInfoEnabled = true;
isDebugEnabled = true;//严重考虑中!!
}
public void debug(Object message, Throwable t) {
if (isDebugEnabled())
printOut("DEBUG",message, t);
}
public void error(Object message, Throwable t) {
if (isErrorEnabled())
errorOut("ERROR",message, t);
}
public void fatal(Object message, Throwable t) {
if (isFatalEnabled())
errorOut("FATAL",message, t);
}
public void info(Object message, Throwable t) {
if (isInfoEnabled())
printOut("INFO",message, t);
}
public void trace(Object message, Throwable t) {
if (isTraceEnabled())
printOut("TRACE",message, t);
}
public void warn(Object message, Throwable t) {
if (isWarnEnabled())
errorOut("WARN",message, t);
}
private void printOut(String level, Object message, Throwable t) {
System.out.printf("%s %s [%s] %s\n",DATE_FORMAT.format(new Date()), level, Thread.currentThread().getName(),message);
if (t != null)
t.printStackTrace(System.out);
}
private void errorOut(String level, Object message, Throwable t) {
System.err.printf("%s %s [%s] %s\n",DATE_FORMAT.format(new Date()), level, Thread.currentThread().getName(),message);
if (t != null)
t.printStackTrace(System.err);
}
@Override
protected void log(int level, Object message, Throwable tx) {
switch (level) {
case LEVEL_FATAL:
fatal(message, tx);
break;
case LEVEL_ERROR:
error(message, tx);
break;
case LEVEL_WARN:
warn(message, tx);
break;
case LEVEL_INFO:
info(message, tx);
break;
case LEVEL_DEBUG:
debug(message, tx);
break;
case LEVEL_TRACE:
trace(message, tx);
break;
}
}
}
}