package jef.database.support; import jef.common.log.LogUtil; import jef.database.DbCfg; import jef.database.jdbc.JDBCTarget; import jef.tools.JefConfiguration; /** * SQL日志工具 * * @author jiyi * */ public abstract class SqlLog { public abstract void append(int count, Object fieldName, Object value); public abstract void append(JDBCTarget db); /** * 输出日志并清除缓冲区 */ public abstract void output(); public abstract void clear(); public abstract SqlLog append(CharSequence csq); public abstract SqlLog append(CharSequence csq, CharSequence csq2); public abstract SqlLog append(CharSequence csq, int csq2); public abstract SqlLog append(CharSequence csq, long csq2); public abstract SqlLog append(int csq); public abstract SqlLog append(long csq); public abstract SqlLog append(char csq); public abstract SqlLog append(double csq); public abstract boolean isDebug(); public abstract void directLog(String string); public abstract void ensureCapacity(int size); public final static class LogImpl extends SqlLog { private static LogFormat formatter = getLogFormat(); private static LogFormat getLogFormat() { if ("no_wrap".equalsIgnoreCase(JefConfiguration.get(DbCfg.DB_LOG_FORMAT))) { return new jef.database.support.LogFormat.NowrapLineLogFormat(); } return new jef.database.support.LogFormat.Default(); } private StringBuilder sb; public LogImpl() { this(32); } public LogImpl(int i) { sb = new StringBuilder(i); } @Override public LogImpl append(CharSequence csq) { sb.append(csq); return this; } @Override public LogImpl append(char c) { sb.append(c); return this; } @Override public void output() { if (sb.length() > 0) { LogUtil.info(sb.toString()); sb.setLength(0); } } @Override public void clear() { sb.setLength(0); } @Override public SqlLog append(int csq) { sb.append(csq); return this; } @Override public SqlLog append(long csq) { sb.append(csq); return this; } @Override public SqlLog append(double csq) { sb.append(csq); return this; } @Override public SqlLog append(CharSequence csq, CharSequence csq2) { sb.append(csq).append(csq2); return this; } @Override public SqlLog append(CharSequence csq, int csq2) { sb.append(csq).append(csq2); return this; } @Override public boolean isDebug() { return true; } public void directLog(String string) { LogUtil.info(string); } @Override public void append(int count, Object fieldName, Object value) { formatter.log(sb, count, String.valueOf(fieldName), value); } @Override public void append(JDBCTarget db) { sb.append(" | ").append(db.getTransactionId()); } @Override public void ensureCapacity(int size) { sb.ensureCapacity(size); } @Override public SqlLog append(CharSequence csq, long l) { sb.append(csq).append(l); return this; } } /** * 日志空实现 */ public static final SqlLog DUMMY = new SqlLog() { public void output() { } public void clear() { } public SqlLog append(CharSequence csq) { return this; } public SqlLog append(CharSequence csq, CharSequence csq2) { return this; } public SqlLog append(CharSequence csq, int value) { return this; } public SqlLog append(int i) { return this; } public SqlLog append(long l) { return this; } public SqlLog append(char c) { return this; } public SqlLog append(double d) { return this; } @Override public SqlLog append(CharSequence csq, long csq2) { return this; } @Override public boolean isDebug() { return false; } @Override public void directLog(String string) { } @Override public void append(int count, Object fieldName, Object value) { } @Override public void append(JDBCTarget db) { } @Override public void ensureCapacity(int size) { } }; }