001package io.ebean.test;
002
003import io.ebeaninternal.api.SpiLogger;
004import io.ebeaninternal.api.SpiLoggerFactory;
005import org.slf4j.Logger;
006import org.slf4j.LoggerFactory;
007
008/**
009 * Create a logger that captures the SQL and register it for later access in tests.
010 * <p>
011 * The logged SQL is accessed by LoggedSql.
012 * </p>
013 */
014public class CapturingLoggerFactory implements SpiLoggerFactory {
015
016  @Override
017  public SpiLogger create(String name) {
018    SpiLogger logger = new LogAdapter(LoggerFactory.getLogger(name));
019    if (name.equals("io.ebean.SQL")) {
020      return LoggedSql.register(logger);
021    }
022    return logger;
023  }
024
025  private static final class LogAdapter implements SpiLogger {
026
027    private final Logger logger;
028
029    LogAdapter(Logger logger) {
030      this.logger = logger;
031    }
032
033    @Override
034    public boolean isDebug() {
035      return logger.isDebugEnabled();
036    }
037
038    @Override
039    public boolean isTrace() {
040      return logger.isTraceEnabled();
041    }
042
043    @Override
044    public void debug(String msg) {
045      logger.debug(msg);
046    }
047
048    @Override
049    public void trace(String msg) {
050      logger.trace(msg);
051    }
052  }
053}