package railo.commons.io.log;
import java.util.Locale;
import java.util.TimeZone;
import railo.commons.lang.StringUtil;
import railo.runtime.format.DateFormat;
import railo.runtime.format.TimeFormat;
import railo.runtime.op.Caster;
import railo.runtime.type.dt.DateTime;
import railo.runtime.type.dt.DateTimeImpl;
/**
* Helper class for the logs
*/
public final class LogUtil {
private static final DateFormat dateFormat=new DateFormat(Locale.US);
private static final TimeFormat timeFormat=new TimeFormat(Locale.US);
private static final String LINE_SEPARATOR=System.getProperty("line.separator");
/**
* return log header line
* @return header
*/
public static String getHeader() {
return "\"Severity\",\"ThreadID\",\"Date\",\"Time\",\"Application\",\"Message\""+LINE_SEPARATOR;
}
/**
* return log line from given data
* @param type
* @param application
* @param message
* @return line
*/
public static String getLine(int type,String application, String message) {
StringBuilder data=new StringBuilder();
if(application==null)application="";
if(message==null)message="";
// Severity
data.append('"');
data.append(toStringType(type,"INFO"));
data.append('"');
data.append(',');
data.append("\"web-0\"");
data.append(',');
DateTime date = new DateTimeImpl();
// Date
data.append('"');
data.append(dateFormat.format(date,"mm/dd/yyyy",TimeZone.getDefault()));
data.append('"');
data.append(',');
// Time
data.append('"');
data.append(timeFormat.format(date,"HH:mm:ss",TimeZone.getDefault()));
data.append('"');
data.append(',');
// Application
data.append('"');
data.append(StringUtil.replace(application,"\"","\"\"",false));
data.append('"');
data.append(',');
// Message
data.append('"');
data.append(StringUtil.replace(message,"\"","\"\"",false));
data.append('"');
return data.append(LINE_SEPARATOR).toString();
}
/**
* translate int type to String type
* @param type
* @param defaultValue
* @return string type
*/
public static String toStringType(int type, String defaultValue) {
switch(type) {
case Log.LEVEL_INFO: return "INFO";
case Log.LEVEL_DEBUG: return "DEBUG";
case Log.LEVEL_WARN: return "WARN";
case Log.LEVEL_ERROR: return "ERROR";
case Log.LEVEL_FATAL: return "FATAL";
default: return defaultValue;
}
}
/**
* transalte a string log type to a int represenatation
* @param attribute
* @param defaultValue
* @return int lelog lev
*/
public static int toIntType(String attribute, int defaultValue) {
if(attribute==null) return defaultValue;
attribute=attribute.toLowerCase().trim();
if(attribute.startsWith("info")) return Log.LEVEL_INFO;
if(attribute.startsWith("debug")) return Log.LEVEL_DEBUG;
if(attribute.startsWith("warn")) return Log.LEVEL_WARN;
if(attribute.startsWith("error")) return Log.LEVEL_ERROR;
if(attribute.startsWith("fatal")) return Log.LEVEL_FATAL;
return defaultValue;
}
public static String toMessage(Exception e) {
if(e==null) return "";
String msg = e.getMessage();
String clazz=Caster.toClassName(e);
if(StringUtil.isEmpty(msg)) return clazz;
return clazz+":"+msg;
}
/*
public static File getLogFileX(Log log) {
if(log instanceof LogFile) return ((LogFile)log).getFile();
return null;
}
public static Object getLogTemplate(Log log) {
if(log instanceof LogFile) return ((LogFile)log).getTemplate();
return "";
}
*/
}